{
 "cells": [
  {
   "cell_type": "code",
   "execution_count": 1,
   "metadata": {},
   "outputs": [],
   "source": [
    "import numpy as np\n",
    "import pandas as pd\n",
    "import tensorflow as tf\n",
    "import matplotlib.pyplot as plt\n",
    "import seaborn as sns\n",
    "sns.set()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 2,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>Date</th>\n",
       "      <th>Open</th>\n",
       "      <th>High</th>\n",
       "      <th>Low</th>\n",
       "      <th>Close</th>\n",
       "      <th>Adj Close</th>\n",
       "      <th>Volume</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>2016-11-02</td>\n",
       "      <td>778.200012</td>\n",
       "      <td>781.650024</td>\n",
       "      <td>763.450012</td>\n",
       "      <td>768.700012</td>\n",
       "      <td>768.700012</td>\n",
       "      <td>1872400</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>2016-11-03</td>\n",
       "      <td>767.250000</td>\n",
       "      <td>769.950012</td>\n",
       "      <td>759.030029</td>\n",
       "      <td>762.130005</td>\n",
       "      <td>762.130005</td>\n",
       "      <td>1943200</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>2016-11-04</td>\n",
       "      <td>750.659973</td>\n",
       "      <td>770.359985</td>\n",
       "      <td>750.560974</td>\n",
       "      <td>762.020020</td>\n",
       "      <td>762.020020</td>\n",
       "      <td>2134800</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>2016-11-07</td>\n",
       "      <td>774.500000</td>\n",
       "      <td>785.190002</td>\n",
       "      <td>772.549988</td>\n",
       "      <td>782.520020</td>\n",
       "      <td>782.520020</td>\n",
       "      <td>1585100</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>2016-11-08</td>\n",
       "      <td>783.400024</td>\n",
       "      <td>795.632996</td>\n",
       "      <td>780.190002</td>\n",
       "      <td>790.510010</td>\n",
       "      <td>790.510010</td>\n",
       "      <td>1350800</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "         Date        Open        High         Low       Close   Adj Close  \\\n",
       "0  2016-11-02  778.200012  781.650024  763.450012  768.700012  768.700012   \n",
       "1  2016-11-03  767.250000  769.950012  759.030029  762.130005  762.130005   \n",
       "2  2016-11-04  750.659973  770.359985  750.560974  762.020020  762.020020   \n",
       "3  2016-11-07  774.500000  785.190002  772.549988  782.520020  782.520020   \n",
       "4  2016-11-08  783.400024  795.632996  780.190002  790.510010  790.510010   \n",
       "\n",
       "    Volume  \n",
       "0  1872400  \n",
       "1  1943200  \n",
       "2  2134800  \n",
       "3  1585100  \n",
       "4  1350800  "
      ]
     },
     "execution_count": 2,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "df = pd.read_csv('../dataset/GOOG-year.csv')\n",
    "df.head()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 3,
   "metadata": {},
   "outputs": [],
   "source": [
    "class Agent:\n",
    "\n",
    "    LEARNING_RATE = 1e-4\n",
    "    LAYER_SIZE = 256\n",
    "    GAMMA = 0.9\n",
    "    OUTPUT_SIZE = 3\n",
    "\n",
    "    def __init__(self, state_size, window_size, trend, skip):\n",
    "        self.state_size = state_size\n",
    "        self.window_size = window_size\n",
    "        self.half_window = window_size // 2\n",
    "        self.trend = trend\n",
    "        self.skip = skip\n",
    "        self.X = tf.placeholder(tf.float32, (None, self.state_size))\n",
    "        self.REWARDS = tf.placeholder(tf.float32, (None))\n",
    "        self.ACTIONS = tf.placeholder(tf.int32, (None))\n",
    "        feed_forward = tf.layers.dense(self.X, self.LAYER_SIZE, activation = tf.nn.relu)\n",
    "        self.logits = tf.layers.dense(feed_forward, self.OUTPUT_SIZE, activation = tf.nn.softmax)\n",
    "        input_y = tf.one_hot(self.ACTIONS, self.OUTPUT_SIZE)\n",
    "        loglike = tf.log((input_y * (input_y - self.logits) + (1 - input_y) * (input_y + self.logits)) + 1)\n",
    "        rewards = tf.tile(tf.reshape(self.REWARDS, (-1,1)), [1, self.OUTPUT_SIZE])\n",
    "        self.cost = -tf.reduce_mean(loglike * (rewards + 1)) \n",
    "        self.optimizer = tf.train.AdamOptimizer(learning_rate = self.LEARNING_RATE).minimize(self.cost)\n",
    "        self.sess = tf.InteractiveSession()\n",
    "        self.sess.run(tf.global_variables_initializer())\n",
    "    \n",
    "    def predict(self, inputs):\n",
    "        return self.sess.run(self.logits, feed_dict={self.X:inputs})\n",
    "    \n",
    "    def get_state(self, t):\n",
    "        window_size = self.window_size + 1\n",
    "        d = t - window_size + 1\n",
    "        block = self.trend[d : t + 1] if d >= 0 else -d * [self.trend[0]] + self.trend[0 : t + 1]\n",
    "        res = []\n",
    "        for i in range(window_size - 1):\n",
    "            res.append(block[i + 1] - block[i])\n",
    "        return np.array([res])\n",
    "    \n",
    "    def discount_rewards(self, r):\n",
    "        discounted_r = np.zeros_like(r)\n",
    "        running_add = 0\n",
    "        for t in reversed(range(0, r.size)):\n",
    "            running_add = running_add * self.GAMMA + r[t]\n",
    "            discounted_r[t] = running_add\n",
    "        return discounted_r\n",
    "    \n",
    "    def get_predicted_action(self, sequence):\n",
    "        prediction = self.predict(np.array(sequence))[0]\n",
    "        return np.argmax(prediction)\n",
    "    \n",
    "    def buy(self, initial_money):\n",
    "        starting_money = initial_money\n",
    "        states_sell = []\n",
    "        states_buy = []\n",
    "        inventory = []\n",
    "        state = self.get_state(0)\n",
    "        for t in range(0, len(self.trend) - 1, self.skip):\n",
    "            action = self.get_predicted_action(state)\n",
    "            next_state = self.get_state(t + 1)\n",
    "            \n",
    "            if action == 1 and initial_money >= self.trend[t] and t < (len(self.trend) - self.half_window):\n",
    "                inventory.append(self.trend[t])\n",
    "                initial_money -= self.trend[t]\n",
    "                states_buy.append(t)\n",
    "                print('day %d: buy 1 unit at price %f, total balance %f'% (t, self.trend[t], initial_money))\n",
    "                \n",
    "                \n",
    "            elif action == 2 and len(inventory):\n",
    "                bought_price = inventory.pop(0)\n",
    "                initial_money += self.trend[t]\n",
    "                states_sell.append(t)\n",
    "                try:\n",
    "                    invest = ((close[t] - bought_price) / bought_price) * 100\n",
    "                except:\n",
    "                    invest = 0\n",
    "                print(\n",
    "                    'day %d, sell 1 unit at price %f, investment %f %%, total balance %f,'\n",
    "                    % (t, close[t], invest, initial_money)\n",
    "                )\n",
    "            \n",
    "            state = next_state\n",
    "        invest = ((initial_money - starting_money) / starting_money) * 100\n",
    "        total_gains = initial_money - starting_money\n",
    "        return states_buy, states_sell, total_gains, invest\n",
    "        \n",
    "    \n",
    "    def train(self, iterations, checkpoint, initial_money):\n",
    "        for i in range(iterations):\n",
    "            ep_history = []\n",
    "            total_profit = 0\n",
    "            inventory = []\n",
    "            state = self.get_state(0)\n",
    "            starting_money = initial_money\n",
    "            for t in range(0, len(self.trend) - 1, self.skip):\n",
    "                action = self.get_predicted_action(state)\n",
    "                next_state = self.get_state(t + 1)\n",
    "                if action == 1 and starting_money >= self.trend[t] and t < (len(self.trend) - self.half_window):\n",
    "                    inventory.append(self.trend[t])\n",
    "                    starting_money -= close[t]\n",
    "                \n",
    "                elif action == 2 and len(inventory):\n",
    "                    bought_price = inventory.pop(0)\n",
    "                    total_profit += self.trend[t] - bought_price\n",
    "                    starting_money += self.trend[t]\n",
    "                ep_history.append([state,action,starting_money,next_state])\n",
    "                state = next_state\n",
    "            ep_history = np.array(ep_history)\n",
    "            ep_history[:,2] = self.discount_rewards(ep_history[:,2])\n",
    "            cost, _ = self.sess.run([self.cost, self.optimizer], feed_dict={self.X:np.vstack(ep_history[:,0]),\n",
    "                                                    self.REWARDS:ep_history[:,2],\n",
    "                                                    self.ACTIONS:ep_history[:,1]})\n",
    "            if (i+1) % checkpoint == 0:\n",
    "                print('epoch: %d, total rewards: %f.3, cost: %f, total money: %f'%(i + 1, total_profit, cost,\n",
    "                                                                                  starting_money))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 4,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "epoch: 10, total rewards: 1781.590144.3, cost: -3782.833740, total money: 7062.900203\n",
      "epoch: 20, total rewards: 1808.720396.3, cost: -6238.727539, total money: 10819.470396\n",
      "epoch: 30, total rewards: 644.675288.3, cost: -10399.220703, total money: 10644.675288\n",
      "epoch: 40, total rewards: 1696.944943.3, cost: -9798.079102, total money: 11696.944943\n",
      "epoch: 50, total rewards: 593.719845.3, cost: -13938.982422, total money: 10593.719845\n",
      "epoch: 60, total rewards: 634.539913.3, cost: -14890.398438, total money: 9645.289913\n",
      "epoch: 70, total rewards: 1586.160156.3, cost: -10411.115234, total money: 11586.160156\n",
      "epoch: 80, total rewards: 368.749937.3, cost: -15986.910156, total money: 10368.749937\n",
      "epoch: 90, total rewards: 733.844603.3, cost: -15352.789062, total money: 8857.304625\n",
      "epoch: 100, total rewards: 645.715148.3, cost: -15976.339844, total money: 10645.715148\n",
      "epoch: 110, total rewards: 994.814937.3, cost: -11198.958984, total money: 4471.054988\n",
      "epoch: 120, total rewards: 1771.289852.3, cost: -6539.313477, total money: 5164.829891\n",
      "epoch: 130, total rewards: 1643.744995.3, cost: -11630.438477, total money: 11643.744995\n",
      "epoch: 140, total rewards: 1877.095029.3, cost: -7103.230957, total money: 9104.255063\n",
      "epoch: 150, total rewards: 481.749932.3, cost: -18531.593750, total money: 10481.749932\n",
      "epoch: 160, total rewards: 638.035152.3, cost: -16995.314453, total money: 10638.035152\n",
      "epoch: 170, total rewards: 1188.049925.3, cost: -13348.065430, total money: 10263.189940\n",
      "epoch: 180, total rewards: 633.885008.3, cost: -14666.952148, total money: 10633.885008\n",
      "epoch: 190, total rewards: 1675.079952.3, cost: -9106.298828, total money: 5977.189998\n",
      "epoch: 200, total rewards: 567.955136.3, cost: -17828.587891, total money: 10567.955136\n"
     ]
    }
   ],
   "source": [
    "close = df.Close.values.tolist()\n",
    "initial_money = 10000\n",
    "window_size = 30\n",
    "skip = 1\n",
    "agent = Agent(state_size = window_size,\n",
    "             window_size = window_size,\n",
    "             trend = close,\n",
    "             skip = skip)\n",
    "agent.train(iterations = 200, checkpoint = 10, initial_money = initial_money)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 5,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "day 12: buy 1 unit at price 760.539978, total balance 9239.460022\n",
      "day 19, sell 1 unit at price 758.039978, investment -0.328714 %, total balance 9997.500000,\n",
      "day 23: buy 1 unit at price 759.109985, total balance 9238.390015\n",
      "day 26, sell 1 unit at price 789.289978, investment 3.975708 %, total balance 10027.679993,\n",
      "day 27: buy 1 unit at price 789.270020, total balance 9238.409973\n",
      "day 28, sell 1 unit at price 796.099976, investment 0.865351 %, total balance 10034.509949,\n",
      "day 31: buy 1 unit at price 790.799988, total balance 9243.709961\n",
      "day 33, sell 1 unit at price 796.419983, investment 0.710672 %, total balance 10040.129944,\n",
      "day 35: buy 1 unit at price 791.260010, total balance 9248.869934\n",
      "day 36: buy 1 unit at price 789.909973, total balance 8458.959961\n",
      "day 37, sell 1 unit at price 791.549988, investment 0.036648 %, total balance 9250.509949,\n",
      "day 38: buy 1 unit at price 785.049988, total balance 8465.459961\n",
      "day 39: buy 1 unit at price 782.789978, total balance 7682.669983\n",
      "day 40: buy 1 unit at price 771.820007, total balance 6910.849976\n",
      "day 41, sell 1 unit at price 786.140015, investment -0.477264 %, total balance 7696.989991,\n",
      "day 42, sell 1 unit at price 786.900024, investment 0.235658 %, total balance 8483.890015,\n",
      "day 44: buy 1 unit at price 806.150024, total balance 7677.739991\n",
      "day 46: buy 1 unit at price 804.789978, total balance 6872.950013\n",
      "day 50: buy 1 unit at price 804.609985, total balance 6068.340028\n",
      "day 51: buy 1 unit at price 806.070007, total balance 5262.270021\n",
      "day 52, sell 1 unit at price 802.174988, investment 2.476400 %, total balance 6064.445009,\n",
      "day 53, sell 1 unit at price 805.020020, investment 4.301523 %, total balance 6869.465029,\n",
      "day 54, sell 1 unit at price 819.309998, investment 1.632447 %, total balance 7688.775027,\n",
      "day 56: buy 1 unit at price 835.669983, total balance 6853.105044\n",
      "day 57: buy 1 unit at price 832.150024, total balance 6020.955020\n",
      "day 59, sell 1 unit at price 802.320007, investment -0.306909 %, total balance 6823.275027,\n",
      "day 61: buy 1 unit at price 795.695007, total balance 6027.580020\n",
      "day 63: buy 1 unit at price 801.489990, total balance 5226.090030\n",
      "day 64, sell 1 unit at price 801.340027, investment -0.406403 %, total balance 6027.430057,\n",
      "day 65: buy 1 unit at price 806.969971, total balance 5220.460086\n",
      "day 71: buy 1 unit at price 818.979980, total balance 4401.480106\n",
      "day 72: buy 1 unit at price 824.159973, total balance 3577.320133\n",
      "day 73, sell 1 unit at price 828.070007, investment 2.729291 %, total balance 4405.390140,\n",
      "day 74, sell 1 unit at price 831.659973, investment -0.479856 %, total balance 5237.050113,\n",
      "day 78, sell 1 unit at price 829.280029, investment -0.344889 %, total balance 6066.330142,\n",
      "day 79: buy 1 unit at price 823.210022, total balance 5243.120120\n",
      "day 80: buy 1 unit at price 835.239990, total balance 4407.880130\n",
      "day 81, sell 1 unit at price 830.630005, investment 4.390501 %, total balance 5238.510135,\n",
      "day 83: buy 1 unit at price 827.780029, total balance 4410.730106\n",
      "day 86, sell 1 unit at price 838.679993, investment 4.640108 %, total balance 5249.410099,\n",
      "day 88, sell 1 unit at price 845.539978, investment 4.779609 %, total balance 6094.950077,\n",
      "day 89, sell 1 unit at price 845.619995, investment 3.252829 %, total balance 6940.570072,\n",
      "day 90: buy 1 unit at price 847.200012, total balance 6093.370060\n",
      "day 92, sell 1 unit at price 852.119995, investment 3.392548 %, total balance 6945.490055,\n",
      "day 93, sell 1 unit at price 848.400024, investment 3.059973 %, total balance 7793.890079,\n",
      "day 94: buy 1 unit at price 830.460022, total balance 6963.430057\n",
      "day 95, sell 1 unit at price 829.590027, investment -0.676448 %, total balance 7793.020084,\n",
      "day 98: buy 1 unit at price 819.510010, total balance 6973.510074\n",
      "day 101: buy 1 unit at price 831.500000, total balance 6142.010074\n",
      "day 102: buy 1 unit at price 829.559998, total balance 5312.450076\n",
      "day 103, sell 1 unit at price 838.549988, investment 1.301065 %, total balance 6151.000064,\n",
      "day 105, sell 1 unit at price 831.409973, investment -1.863791 %, total balance 6982.410037,\n",
      "day 106: buy 1 unit at price 827.880005, total balance 6154.530032\n",
      "day 108, sell 1 unit at price 824.729980, investment -0.689984 %, total balance 6979.260012,\n",
      "day 109: buy 1 unit at price 823.349976, total balance 6155.910036\n",
      "day 110, sell 1 unit at price 824.320007, investment 0.586936 %, total balance 6980.230043,\n",
      "day 111, sell 1 unit at price 823.559998, investment -0.954901 %, total balance 7803.790041,\n",
      "day 113, sell 1 unit at price 836.820007, investment 0.875164 %, total balance 8640.610048,\n",
      "day 114: buy 1 unit at price 838.210022, total balance 7802.400026\n",
      "day 115: buy 1 unit at price 841.650024, total balance 6960.750002\n",
      "day 116, sell 1 unit at price 843.190002, investment 1.849301 %, total balance 7803.940004,\n",
      "day 117, sell 1 unit at price 862.760010, investment 4.786547 %, total balance 8666.700014,\n",
      "day 118, sell 1 unit at price 872.299988, investment 4.066996 %, total balance 9539.000002,\n",
      "day 119: buy 1 unit at price 871.729980, total balance 8667.270022\n",
      "day 120, sell 1 unit at price 874.250000, investment 3.873341 %, total balance 9541.520022,\n",
      "day 121: buy 1 unit at price 905.960022, total balance 8635.560000\n",
      "day 123, sell 1 unit at price 916.440002, investment 5.128884 %, total balance 9552.000002,\n",
      "day 124: buy 1 unit at price 927.039978, total balance 8624.960024\n",
      "day 127: buy 1 unit at price 934.299988, total balance 7690.660036\n",
      "day 128: buy 1 unit at price 932.169983, total balance 6758.490053\n",
      "day 129, sell 1 unit at price 928.780029, investment 2.518876 %, total balance 7687.270082,\n",
      "day 130: buy 1 unit at price 930.599976, total balance 6756.670106\n",
      "day 131: buy 1 unit at price 932.219971, total balance 5824.450135\n",
      "day 132: buy 1 unit at price 937.080017, total balance 4887.370118\n",
      "day 133: buy 1 unit at price 943.000000, total balance 3944.370118\n",
      "day 134, sell 1 unit at price 919.619995, investment -0.800395 %, total balance 4863.990113,\n",
      "day 135: buy 1 unit at price 930.239990, total balance 3933.750123\n",
      "day 136: buy 1 unit at price 934.010010, total balance 2999.740113\n",
      "day 137, sell 1 unit at price 941.859985, investment 0.809162 %, total balance 3941.600098,\n",
      "day 138, sell 1 unit at price 948.820007, investment 1.786157 %, total balance 4890.420105,\n",
      "day 139: buy 1 unit at price 954.960022, total balance 3935.460083\n",
      "day 140, sell 1 unit at price 969.539978, investment 4.184397 %, total balance 4905.000061,\n",
      "day 141: buy 1 unit at price 971.469971, total balance 3933.530090\n",
      "day 142: buy 1 unit at price 975.880005, total balance 2957.650085\n",
      "day 143, sell 1 unit at price 964.859985, investment 3.501321 %, total balance 3922.510070,\n",
      "day 145: buy 1 unit at price 975.599976, total balance 2946.910094\n",
      "day 146, sell 1 unit at price 983.679993, investment 4.972892 %, total balance 3930.590087,\n",
      "day 147: buy 1 unit at price 976.570007, total balance 2954.020080\n",
      "day 148, sell 1 unit at price 980.940002, investment 4.023330 %, total balance 3934.960082,\n",
      "day 149, sell 1 unit at price 983.409973, investment 5.715728 %, total balance 4918.370055,\n",
      "day 150: buy 1 unit at price 949.830017, total balance 3968.540038\n",
      "day 151: buy 1 unit at price 942.900024, total balance 3025.640014\n",
      "day 153, sell 1 unit at price 950.760010, investment 1.793343 %, total balance 3976.400024,\n",
      "day 154: buy 1 unit at price 942.309998, total balance 3034.090026\n",
      "day 155: buy 1 unit at price 939.780029, total balance 2094.309997\n",
      "day 156: buy 1 unit at price 957.369995, total balance 1136.940002\n",
      "day 157, sell 1 unit at price 950.630005, investment -0.453424 %, total balance 2087.570007,\n",
      "day 158: buy 1 unit at price 959.450012, total balance 1128.119995\n",
      "day 159: buy 1 unit at price 957.090027, total balance 171.029968\n",
      "day 161, sell 1 unit at price 952.270020, investment -1.976381 %, total balance 1123.299988,\n",
      "day 164, sell 1 unit at price 917.789978, investment -5.952579 %, total balance 2041.089966,\n",
      "day 165, sell 1 unit at price 908.729980, investment -6.854243 %, total balance 2949.819946,\n",
      "day 166: buy 1 unit at price 898.700012, total balance 2051.119934\n",
      "day 168, sell 1 unit at price 906.690002, investment -7.155658 %, total balance 2957.809936,\n",
      "day 170: buy 1 unit at price 928.799988, total balance 2029.009948\n",
      "day 172, sell 1 unit at price 943.830017, investment -0.631692 %, total balance 2972.839965,\n",
      "day 173, sell 1 unit at price 947.159973, investment 0.451792 %, total balance 3919.999938,\n",
      "day 175: buy 1 unit at price 953.419983, total balance 2966.579955\n",
      "day 176, sell 1 unit at price 965.400024, investment 2.450364 %, total balance 3931.979979,\n",
      "day 177, sell 1 unit at price 970.890015, investment 3.310348 %, total balance 4902.869994,\n",
      "day 179, sell 1 unit at price 972.919983, investment 1.624240 %, total balance 5875.789977,\n",
      "day 182, sell 1 unit at price 947.799988, investment -1.214240 %, total balance 6823.589965,\n",
      "day 184: buy 1 unit at price 941.530029, total balance 5882.059936\n",
      "day 185: buy 1 unit at price 930.500000, total balance 4951.559936\n",
      "day 186, sell 1 unit at price 930.830017, investment -2.743735 %, total balance 5882.389953,\n",
      "day 187: buy 1 unit at price 930.390015, total balance 4951.999938\n",
      "day 188, sell 1 unit at price 923.650024, investment 2.776234 %, total balance 5875.649962,\n",
      "day 189: buy 1 unit at price 927.960022, total balance 4947.689940\n",
      "day 191, sell 1 unit at price 926.789978, investment -0.216409 %, total balance 5874.479918,\n",
      "day 192, sell 1 unit at price 922.900024, investment -3.201103 %, total balance 6797.379942,\n",
      "day 194, sell 1 unit at price 914.390015, investment -2.882544 %, total balance 7711.769957,\n",
      "day 195, sell 1 unit at price 922.669983, investment -0.841485 %, total balance 8634.439940,\n",
      "day 196: buy 1 unit at price 922.219971, total balance 7712.219969\n",
      "day 198: buy 1 unit at price 910.979980, total balance 6801.239989\n",
      "day 199, sell 1 unit at price 910.669983, investment -2.119545 %, total balance 7711.909972,\n",
      "day 201: buy 1 unit at price 924.690002, total balance 6787.219970\n",
      "day 202, sell 1 unit at price 927.000000, investment -0.103455 %, total balance 7714.219970,\n",
      "day 203, sell 1 unit at price 921.280029, investment -0.101922 %, total balance 8635.499999,\n",
      "day 204: buy 1 unit at price 915.890015, total balance 7719.609984\n",
      "day 206: buy 1 unit at price 921.289978, total balance 6798.320006\n",
      "day 207, sell 1 unit at price 929.570007, investment 2.040663 %, total balance 7727.890013,\n",
      "day 208, sell 1 unit at price 939.330017, investment 1.583235 %, total balance 8667.220030,\n",
      "day 210, sell 1 unit at price 928.450012, investment 1.371343 %, total balance 9595.670042,\n",
      "day 213: buy 1 unit at price 926.500000, total balance 8669.170042\n",
      "day 215: buy 1 unit at price 932.070007, total balance 7737.100035\n",
      "day 217, sell 1 unit at price 925.109985, investment 0.414637 %, total balance 8662.210020,\n",
      "day 218: buy 1 unit at price 920.289978, total balance 7741.920042\n",
      "day 219: buy 1 unit at price 915.000000, total balance 6826.920042\n",
      "day 221: buy 1 unit at price 931.580017, total balance 5895.340025\n",
      "day 222, sell 1 unit at price 932.450012, investment 0.642203 %, total balance 6827.790037,\n",
      "day 223, sell 1 unit at price 928.530029, investment -0.379797 %, total balance 7756.320066,\n",
      "day 224: buy 1 unit at price 920.969971, total balance 6835.350095\n",
      "day 225: buy 1 unit at price 924.859985, total balance 5910.490110\n",
      "day 227, sell 1 unit at price 949.500000, investment 3.174002 %, total balance 6859.990110,\n",
      "day 228, sell 1 unit at price 959.109985, investment 4.820763 %, total balance 7819.100095,\n",
      "day 230: buy 1 unit at price 957.789978, total balance 6861.310117\n",
      "day 233, sell 1 unit at price 978.890015, investment 5.078469 %, total balance 7840.200132,\n",
      "day 234, sell 1 unit at price 977.000000, investment 6.083806 %, total balance 8817.200132,\n",
      "day 235: buy 1 unit at price 972.599976, total balance 7844.600156\n",
      "day 236: buy 1 unit at price 989.250000, total balance 6855.350156\n",
      "day 237, sell 1 unit at price 987.830017, investment 6.808602 %, total balance 7843.180173,\n",
      "day 240, sell 1 unit at price 992.179993, investment 3.590559 %, total balance 8835.360166,\n",
      "day 243, sell 1 unit at price 988.200012, investment 1.603952 %, total balance 9823.560178,\n",
      "day 245, sell 1 unit at price 970.539978, investment -1.891334 %, total balance 10794.100156,\n"
     ]
    }
   ],
   "source": [
    "states_buy, states_sell, total_gains, invest = agent.buy(initial_money = initial_money)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 6,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "iVBORw0KGgoAAAANSUhEUgAAA34AAAFBCAYAAAAomn1FAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAALEgAACxIB0t1+/AAAADl0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uIDMuMC4yLCBodHRwOi8vbWF0cGxvdGxpYi5vcmcvOIA7rQAAIABJREFUeJzs3Xl8VNXZwPHfvTMTCEkIIQv7vpxA2EEREcTdCoIKimtdatOW+rrUta2trVq1vrVva23VWtEqiqAi2mKpVqsobgWquJDDHrYAIYSEBLLMzH3/uHeGyWRmMtlD8nw/Hz4mc7dzZ+7E+9znnOcYlmUhhBBCCCGEEKL9Mlu7AUIIIYQQQgghmpcEfkIIIYQQQgjRzkngJ4QQQgghhBDtnAR+QgghhBBCCNHOSeAnhBBCCCGEEO2cBH5CCCGEEEII0c5J4CeEEDEopZ5VSt3fDPudppTSTb1f0XYppWYopXbFWF6mlBrckm0SQgjRcbhbuwFCCNEYSqntwPVa6381x/rNRWv9AaCacp9Kqf7AN2EvJwG3aa0fUUoZwE+A7wHdgDeBXK11adh+ugPabqY+JcqxRgGPABOBdK21EWEfTwNnAweAH2utXwxZfjnwIJABvA1cp7U+6Cy7AbgGGA0s1lpfE7LdQGAbUB5yuF9rre8LWedM4GHs97cY+JHWemmk8whr8y+AoVrrK+tatyHr10VrndwU+2mIkPfVo7X2tsLxnwV2aa3vjrI85rUdYf1uwO+Bbzkv/Ulr/YsI650KvAf8KnDs5rq2lVKdgD8BZwLdgS3Otv9wtusHvAwMB57RWt8ass9/AD/TWq+J9P4IIUQ8JOMnhBDthNZ6h9Y6OfAPO3DyA686q3wbuAqYCvQGEoE/RNjVr4ENdRyuGlgKfCfK8j8CVUAP4ArgcaVUDoDz3yedtvQAjmDfEAfsAe4HFsY4freQcw0N+kYCLwI/BVKBscDaOs5FtHFxXNvh/g/oAgwETgSuUkpdG7qCUsqDHRx+GrZtc13bbmAncCr2tXk3sNQJugF+DPwVGARcoJSa5OxzPrBNgj4hRGNJxk8IcdxSSj0P9Af+ppTyAfdqrR9WSs3GfuLeB/gc+IHWekOM9V8GpmEHQl84638dx/Fd2Jmlq4HD2FmCP+BkTZwbzTuAvkAhdmbqSWfbGcAirXVf5/ftwGPYwdkAYCVwtda6QimVATwLnIJ9s/s1cKrW2l9HE78NrNJab3d+Px94Wmu90znmr4F3lVI/0FofcV47GRgF/JnoN75orTWglVJDI7wvScBcYJTWugz4UCn1BvbN8F3YN8t/01qvctb/GbBBKZWitT6stV7mvD7Jee/q427gyUAWBShy/sWklDoXOxtqKKUuALZorccqpXoDT2C/9wexP8OnYqwf9TOPow0WMExrvdnJgJVjBy7TsbNdl2uttyilHgfKtda3hWz7OvC+1vq3Tpv/4GxXBvyf1vpRZ70TsQOR4cBR4AWt9Y+AVc6uDimlAM7Czph+F/gMuNY5/yudbe8DOgG3a63/6uy7E/Ar4BJn2WvALVrro4HrHTsguxPwAT/RWj+jlMrFviYspdTNwL+11ufX8XaFX9vhzge+5VzX25VSTwPXAc+ErHMr8BaQFbphc17bwC9Cdvd3pdQ27MziduyA7/da6xKl1H+AwUqpjc5+T6vj/RBCiDpJxk8IcdzSWl8F7ADOdzIBDyulhgOLgZuBTOzujH9TSiVEWt/Z1T+AYdg3gOuAF+Jswnexu5KNAyYAF4Qt3w/MArpi3zj/n1JqQoz9XQKci30DOAa7uyPYN6i7nPPpgR1wWLEa5nTr/DZ2BiGUEfZzJ+xzDwSyjwE31LX/OgwHvFrrjSGvfQHkOD/nOL8DoLXegp1BGV6PY+QrpXYppZ5xAuOAkwCUUl8qpQqUUoucrnkxaa1XAg8AS5xrY6yz6CXs9743MA94QCl1eoz16/uZx3Ip8EsgDdiMHVSBfX3Pdz5jlFJp2N0OX1JKmcDfsN/fPsAZwM1KqXOcbX+PHVx0BYZgZ7bADhLhWCb1Y+f3ycB6IB07k/oScAIwFDsIfEwpFeii+hD2ZzjOWd4H+HnI+fTEznT1wX6o8EelVJrW+s/Y37mHnWPHDPpiXNvhwq/1USH7GIAdCN5bxz7CNdm1rZTq4bweeMj0FXCW0011ovP6fcDvtNaH6tlOIYSoRQI/IUR7Mx9YobV+W2tdDfwGO5N3crQNtNYLnUxTJfYT+bFKqdQ4jnUJ9k30Lq11MfaNb+h+V2itt2itLa31+9jZhWkx9veo1nqPM9btb9g30GB3PesFDNBaV2utP9Ba1xWYnYIdJL4S8tpK4Hql1EDn/O50Xu/i/PdG4FOtdWO7RiYDpWGvlQApIctLYiyP5QB24DEA++Y4hZqBel/s7Mtc7IA2WnfWOjljrqYCd2qtK7TWnwN/wQ46ImrAZx7La1rrz5wxdy9w7Hr4ADswD+x3HvCx1noP9nuTqbW+V2tdpbXeCjyFHUSCfS0NVUplaK3LtNaf1NGGbVrrZ7TWPmAJ0A87U16ptX4LO6gZ6gRjudgZvoNOduuBkOMGjn2vcw2/iZ2NbMg410jXdriVwF1KqRQnc3cdx65zgEexx8yV1fPYTXJtO91MXwD+qrXOc15+EPszfR87K5uA/QDob0qpF5VSq5zxr0II0SDS1VMI0d70BvIDv2it/UqpndhZhlqcLNevgIuxM2qB7pMZ1L6Bi3SsnSG/h/6MUupbwD3YT/VN7BvPL2Psb2/Iz0ec/QP8L3ZA+pbTDe/PWuuHiO1q4NWwG9uF2Dfu72H//X8Eu0vcLqd74I3YwVRjlWFnvEJ1xe4OG8/yqJzzCYx12ufcCBeEdKU7il0YYyOAUuoBoKGFfHoDgSAmIB+YFG2DBnzmsYRfD8kAWmtLKfUScBl2F83LsbtRgh0Q91ZKhWaIXNjBItiZtnuBPKeb4S+11n+P0YZ9IT8fdY4f/loy9nenC7DWuUbBzrK5QtYt0jULxwTPqZ4iXdvhbsQO+Ddhd/VdjP1+oZQ6H0jRWi9pwLEbfW07WdnnsYPmYCDnPPCZH7LOKuD72F09v8LuAbBOKfWO1rquMbhCCFGLBH5CiONdeOZrD3bhByDYLawfsDvK+pcDc7Ar7W3H7opWTM1uYtEUUHMMWr+Q43bCLjzxbeB1rXW1Ump5nPutwQk8bgVudSoOvquU+o/W+p1I6yulErED2QvD9uPHDkrucdY7G/t92Q3Mxs4qfuPcuCcCiUqpvUAfJ+MTr42AWyk1TGu9yXltLMe6tH3t/B5o72DsLqcbqb/A5xnowbKemp9xfbqsRrqWuocElWCPEY14LTXlZx6HxdgPAh7C7o4Z+Kx3YmfphkXayPk8LnMCi4uAV5RS6eHn0gAHsIPAHK317rpWjiCu40e7tsM5QdQVIds9gD1WEezur5Ocaxvs77xPKTVaaz2njiY06tp2/h49jZ2xPM/plRBJLvCJ1vorpdRo7HGaVUqpL7H/vkngJ4SoNwn8hBDHu31A6NxnS7G7eJ2B/cT8JqAS+CjK+inO8iLsjMUD9Tj2UuAmpdQK7EIcd4YsS8C+4SsEvE4m6GzsJ/f1opSaBeRhl38vwS6MEauwy4XYweu/w/bTHXu82FZgBPBb7K53fmWXix8Ysvp8nKA4UtDn3MB2cs4TpVRnwHK6AJYrpZYB9yqlrsfuojiHY91tXwA+VkpNwx5TeS+wLBBcKaXc2P9/cgEuZ99ebRfMmQwcws7kpGF32XtPax3Izj4D/EwptQg7Y3YXEMxoKbuIzi+01s9GeN/2YY+xMrXWfq31TqXUR8CDSqnbsLN43+FYQFFjfZrwM6+L1vq/SqkD2F1P/xkyBuwz4LBS6k7s96YK+7NO1Fr/Ryl1pbN+YUhW0O+02Y/93ah3AO5cQ09hj2m8QWu9XynVB7sIyj/j2EX49zKaiNd2OKXUEOzr5BD2Z5CLXU0T4GfU7Jb9e+wg/z5n22a7toHHsT+PM7XWR6O0PQv4ITDFeWkbcJpzLU7CztQLIUS9yRg/IcTx7kHgbqXUIaXUbVprjV104g/YWYjzsYu5VEVaH3gOu/vebuzKiXWNeQr1FPYYrvXAf7ELyXgBn3OjdyN2cFiMHUS90cBzHIbdXbEM+Bh7TrJYN75XA89HGAeY4bSxHLugzUKnsAbOTe3ewD/sALPa+RmlVH9lTzDe39nXAOwMTyDTcRR77r+ABdhZw/3Y2algpVTnv9/Hvknejx18LwjZ9m5nf3dhf5ZHndfADg5WYned+wo7aL8ssKHWeiH2Z/op9udaif05oJRKwC5SEu0zftn5b5FSap3z82XYAfEe7CqV9+hjc0DWWL+JP/N4vIidqQ7OIecE6bOwA5Jt2N+Bv2BntcAuHvS1UqoMO+C5VGt9VNvVL38FrHa+Gyc1oD13Yheh+UQpVYp9zcY7hu9pYKRz7OUx1ot4bSulpjnnFDARu4vtYezv/BUh19/hsGv9KHaV1IPOts1ybTsFZb6H/dnsdb5PZUqpK6jpN9gPZALn8yBwOnY2929apnUQQjSQYVmN7d0hhBACguO7ntBaD2jttojalFKnAD/UWl9W58pCCCFEOyOBnxBCNJAz3ug07KxfD+zxXZ9orW9u1YYJIYQQQoSRrp5CCNFwBvY8a8XYXT03UHPeMiGEEEKINkEyfkIIIYQQQgjRzknGTwghhBBCCCHaueNxOodOwAnY82fVZ14pIYQQQgghhGgPXNjz7/4Hu4J1nY7HwO8E4IPWboQQQgghhBBCtLJpwIfxrHg8Bn4FAMXF5fj9bWt8Ynp6MkVFZXWvKEQ9ybUlmpNcX6K5yLUlmpNcX6I5tfXryzQN0tKSwImN4nE8Bn4+AL/fanOBH9Am2yTaB7m2RHOS60s0F7m2RHOS60s0p+Pk+op76JsUdxFCCCGEEEKIdk4CPyGEEEIIIYRo547Hrp4R+XxeiosL8XqrWq0N+/eb+P3+Vjv+8cw0XSQmJpOcnIphGK3dHCGEEEIIIdqVdhP4FRcX0rlzF5KSerZa4OB2m3i9EvjVl2VZ+HxeDh8+RHFxId27Z7V2k4QQQgghhGhX2k1XT6+3iqSkrpItOg4ZhoHb7aFbt3SqqipauzlCCCGEEEK0O+0m8AMk6DvOGYYJHBfVk4QQQgghhDiutKvAr6HKyypZ/sLnHClrvfGBQgghhBBCCNFcJPAD1q7Op2BnCWtW5zfZPk85ZRJHjhxpsv395S9P8M47bzXZ/qLJy/uGX/7y7mbb/5tv/o27776j2fYvhBBCCCFEU/EdPYrVToo3dvjAr7yskrwv9wGQ9+XeNpv1u/7673PGGWc3+3Gys0dyzz33N/txhBBCCCGEaMuObtrIlpt+SPHKN1u7KU2i3VT1bKi1q/OxLHtcmWVZrFmdz/RzhjXJvhcvfp4PPnifysoKvve9HzJjxhkUFOzh+uuvYsWKdwBq/P7II7+mV69eXH75twHYuDGPe+75CS+++CoPPPBLsrNHMHfufJ5++kl27MinvLyMPXt206dPX+6779d07tyZsrIyHnzwl2zbtpXMzCwyMjJJS+vODTfcXKNtFRUV3H//PWzfvhWXy03//gO4776HWLduDX/84+95+unnAXj11SW8/PJLJCenMGXKVJYtW8qKFe8E2z179kV88slqKioquOuunzN27Di8Xi933HEzJSUlVFZWMnJkDrff/hM8Hk+TvK9CCCGEEEI0t4NvrQS/H4z2kStrH2fRQIFsn99nB35+n9WkWT/TNHn22Rf59a9/y8MPP0Bx8cGY68+dewmvv74sGIi++upSLrzw4ohFa7TewD33/IoXXngFr9fLW2/9A4BnnnmKlJSuvPjiq9x330OsX/95xGN9+unHHDlSzqJFL/PXvy7m9tt/UmudzZs38fzzz/L44wv5y1+e4/DhwzWWl5SUMGrUGJ555kWuvfa7PPHEowC4XC7uued+nn76eZ5/fgk+n48VK16v+w0TQgghhBCiDagsOkj5F5+Dy0XXk09u7eY0iQ4d+IVm+wICWb+mMGvWHAD69x/I8OGKr7/+Mub6AwcOonfvPnzyyUeUlpayevUqzjvv/IjrnnjiSaSkpGAYBiNHjmL37l0A/Pe/a4LbdO2ayrRpp0bcfujQYWzfvo1HHvk17777LxISEmqt89//rmXKlKmkpaUBMHPm7BrLExO7MHXqNAByckaze/duAPx+P4sXL+Kaay7n6qsvZd26NWzatDHmuQshhBBCCNFW7H/nXfD7SR43Hndqt9ZuTpPosIFfeLYvoKmzfuFcLhd+/7FjVlXVPM68eZfy2muvsGLFG0yffhrJyckR95OQ0Cn4s2ma+Hy+erWjT5++LFq0lBNOmMyaNZ9yzTWXUVlZWa99JCQc67ppt8ELwNtvr2T9+s/505+e4rnnlnDhhfNqnacQQgghhBBtkeX3s++ttwFInT6jdRvThDps4Bcp2xfQVFm/FSveAGDnzh1s2qTJyRlN9+7peL1edu3aCdhBUqgpU6ayY0c+S5a8wEUXXVLvY44fP5GVK1cAcPjwYT74YFXE9fbv34dpupg+fQY33ngrhw4Vc/hwaY11xo2bwCeffMShQ4cAWLny73G1oazsMKmp3ejSJYmysrJa5yiEEEIIIURrqtpbwM7f/Jrid97GCkuglH/1JZWFB/BkZtJlxMhWamHT65DFXaJl+wICWb9JUwfQJbl2F8h4+Xw+rr32cioqKrj99p+QltYdgJtuupVbbvkh3bp1Y8qUU2psY5om3/rWTD755COGDq1/kZlrrvkuDzzwSy6/fC7p6RlkZ4+ImDXcsmUzTzzxGAB+v48rr7yGjIxMduw4FvAOGzacyy//Nt///rV06ZLEpEknkJQUOQMZ6txzZ/HBB6u4/PK5pKV1Z+zY8fXOJgohhBBCCNFcytat5WjeBo7mbaB09YdkXfltEgcPAaBk1XsApE47FcNsP3kyI1rWqw0bCGwrKiqr0WVy7958evYcENcOVv1zIxvW740a+AGYLoMRY3rVq8Kn223i9TZ+no+bb17A7NkXcfrpZ9Z7W6/Xi8/no1OnTpSXl7FgwfXccMMtnHDC5Aa15ciRcrp0SQLg6aefZPfuXfz85/c1aF/xqM/n2JFkZqZQWHi47hWFaAC5vkRzkWtLNCe5vkRjFC59ieK3VoJhgBMPudPT8WRmcXSjxjAMBj38W9ypqa3c0shM0yA9PRlgELA9nm06ZMZv7+7SmEEf2Fm/vbtLWqhFtry8b/j5z3/M8OGKGTNOb9A+Dh8u5dZbb8Tv91NVVclZZ53b4KAP4PHHH+PLL7/A662md+8+3HHHTxu8LyGEEEIIIdoCX5n90CDz0svxlZRQ/NZKvEVFeIuKAEg/ZWqbDfoaqkMGfpdcN6m1mxBRdvZIli5t3LQHaWndWbhwURO1CG699c4m25cQQgghhBBtga+sDABP93TSzjiL9NkXUF10gOrCQnylpfQ/bSqH2tlIpQ4Z+AkhhBBCCCE6Ll95OQAupxaG4XaT0KMnCT16AuDpmgLtrCtx+xmtKIQQQgghhBBxCHT1dEWZOq09ksBPCCGEEEII0aEEunqaHSjw65BdPefPvwCt8+pcT6lslixZ3gItEkIIIYQQQrQEy+/Hf+QIGAYup3p9R9AhM35jxozD4/HEXMfj8TB27PgWapEQQgghhBCiJfjLy8GyMBO7YLhcrd2cFtMhA7/c3AWYdUzGaJomubkLWqhF8Oabf+Puu+8AYN26NXznO1cBcOBAIf/zP99rkTY89NB9fPHFf5tt//Pmnc/WrZubbf9CCCGEEELUJTi+L6XjdPOEDhr4ZWZmMXv2hVGzfh6PhzlzLiIjI7OFW1ZbRkYmf/jDky1yrLvu+plkOYUQQgghRLvmK3MqeiZ1rMCvQ47xAzvr98Ybr0Vc1thsX0VFBffffw/bt2/F5XLTv/8A7rvvIQD+8Y+/s2zZy/h8PpKTk7nttrvo339g1H0VFOzh+uuvYsWKdwA45ZRJ5OYuYNWq9ygpKeGHP7yRGTPOAOC9997hz3/+E506deK0087kz3/+E2+9tYouXbrU2OcHH7zHU089jmm68Pm83HLLHUyYMIkbbsjlssuuYurUaRQW7uf++++hqKiIPn36YFkwefJJzJ07n1/96hckJCSwc+cO9u/fR07OaO6++5cYhsFbb63k5ZcX4/VWA/DDH97MpEknNvi9FEIIIYQQoil1xIqe0IEDv0DWb/nyV6murg6+3hTZvk8//ZgjR8pZtOhlAEpLSwH44ov/8u67b/PHPz5FQkICH3+8mgcfvJfHH19Yr/0nJSXxl788x/r1n/Pzn/+YGTPO4ODBIh5++AGefPIZ+vXrz5IlL0Td/i9/eZI77vgpo0aNwefzUVFxtNY6v/vd/zJ+/ESuueZ69u4t4NvfvpTJk08KLt+6dQu/+92fME2Ta6+9gjVrPuWEE05i8uSTOOusczAMgx07tnPTTQt47bU363V+QgghhBBCNBdfuV3RUwK/MEqp3wBzgYHAaK31V87rw4G/AulAEfBtrfWmxixraZGyfk0xtm/o0GFs376NRx75NePHT+Tkk08BYPXqVWzevInc3GsAsCyLw4dL673/M844B4CcnNEcOFBIZWUl33zzFcOHK/r16w/AzJlz+MMf/i/i9hMnTuLRR3/LjBmnc9JJJzN48NBa66xbt5abb74dgJ49ezFx4gk1lk+bNoNOnToBoJRi9+5dnHAC7N69i1/84qcUFhbidrs5eLCIoqIDpKdn1Ps8hRBCCCGEaGq+w07g18G6esYzxm85MB3ID3v9CeCPWuvhwB+BJ5tgWYsKH+vXVGP7+vTpy6JFSznhhMmsWfMp11xzGZWVlVgWzJw5m2effZFnn32Rv/51McuWraj3/hMSEgBwOVWIfD5fvba/8cZbufPOu3G7PfzsZ3dF7fIaS6dOCcGf7S6jdht+8YufcuGFF7No0VIWLlyEy+Wiqqqq3vsXQgghhBCiOQQzfikprdySllVn4Ke1/lBrvTP0NaVUFjABWOy8tBiYoJTKbOiyxp9Kw4RW+GyqSp779+/DNF1Mnz6DG2+8lUOHijl8uJSpU6excuUK9u/fB9gBW17ehkYfD2DkyFFs3KjZvXsXYI8ljGbHju0MGTKUSy65jLPP/hYbNnxTa53x4ycG97Fv317WrftPXO0oKyujV6/eAKxY8YYEfUIIIYQQok0JjPEzO1jGr6Fj/PoBu7XWPgCttU8ptcd53WjgssLGnUrDBLJ+r7yypMkqeW7ZspknnngMAL/fx5VXXkNGRiYZGZnk5i7grrt+hM/nx+ut5rTTziQ7e0Sjj9m9ezq33fZjbrvtRjp37szJJ0/D7XbTuXPnWus+/vhj7Nq1A5fLTXJyMj/+8c9rrXPTTbdy//338NZbK+nduzcjRuSQFMeX48Ybf8RPfnIbKSkpTJ58MqmpqY0+NyGEEEIIIZqKr6xjjvEzLMuKa0Wl1HZgltb6K6XUROA5rXVOyPJvgCuxg7t6L9Nar4uzzQOBbeEvfv31N/TuPSDOXdRUWLif2267hUce+V2bmMKhocrLy0lKSgLg739/nTfeeJ0//7l+hWMCKioqcLvduN1uDhwo5Nprr+Kxx55gwICBTdji2vbsyScnZ2SzHkMIIYQQQnRc6+/6KYc35DHqV/eSOiqn7g3atkHA9nhWbGjGbyfQRynlcrJ2LqC387rRwGX1UlRUht9/LGj1+/14vf4GnUxaWgZPP/08QIP3AeB2m43avrFeeulF/v3vd/D5vHTtmsodd/y0we3Zvj2f+++/B8uy8Pm8XHvtd+nTp3+zn5/f76ew8HCzHuN4lJmZIu+LaDZyfYnmIteWaE5yfbUv8+dfgNZ5da6nVDZLlixv1LEqi0sAOOx1URXlGmrr15dpGqSn1y9j2aDAT2u9Xyn1OXAZsMj573+11oUADV0mGufqq7/D1Vd/p0n2NXToMJ599sUm2ZcQQgghhBCxjBkzjq1bt9SYZi2cx+Nh7NjxjT7Wsekckhq9r+NJncVdlFKPKqV2AX2BfymlvnYWfR/4H6XURuB/nN9p5LJGibfbqmibLMuPnRQWQgghhBAdSWjBxWiaohCj5fcfG+MnxV1q0lrfCNwY4fU8YHKUbRq0rDHc7gTKy0tJSuqKYUjwcDwJdCc9fLiYhITaxWiEEEIIIcTxrbyskrdf38DZc0bSJTmh1vJAwcXly1+NmPXzuN1NUojRf/QoWBZmYiKGu6Gj3o5P7eZs09IyKS4upKzsUKu1wTRN/P7WG+N3PDNNF4mJySQnSxVQIYQQQoj2JHT83i/+N/p6g/r2w4jSg8/w+fjP6g8YNy67zuPFGgcYmMqho2X7oB0Ffi6Xm4yMXq3ahrY+CFQIIYQQQoiWNnLEaDZt2oTf74u6jtvlYlhlFcPSuvPugUK8IQGg2zCYkZGFq0sSuzyeRo0DDHTzNDvYVA4Qxxg/IYQQQgghhGioCTkzMYw6xu/5/czr259rL70SM6wLpishgXkDB3NBYhJmHUO66hoH2FHn8AMJ/IQQQgghhBDNpLyskoL8atSgKZimK+I6bsPgjEFDGHvvrxjxnVzmXDAXj8cD2Bm8OXMuYsD0GaQlJHDWiJzgsnCBdWONA+zIgV+76eophBBCiKYT75xa8WiKebeEEMentavzsSyLCTmz0Ns+Bmp393S53fzo8b/QqUdPwK7w+cYbrwHHMngplVWUvP9vZnsSeDtK9jCeqp/BMX4dMPCTjJ8QQgghahkzZlzUp+oBhmHUWX69qebdEkIcf8rLKsn7ch9+n0VSYmrErJ/H42HOhfPIdII+OFbh0zCMYAavU58+JGaPoBsG54yfiDvsb0882T4Af3k5AK7klCY6y+OHBH5CCCGEqCWeObUsy6qzmnVTzLslhDg+BbJ9ARNyZtUa6xftb0Ru7gLGj59YY1m3088EYObRilrVP+P9W9ORq3pK4CeEEEKIWgJP3OvK+sWSkJDQJPNuCSGOP6HZvoDwrJ9puph53gUR/0ZkZmaxcOGiGsuSx47D3T2dtIQETuvZC4/LHrXmDskM1iU4xi+l4wX12at/AAAgAElEQVR+MsZPCCGEEBGFjrNpCMn2CdE+xTsGOD2tH/POubvGa6Fj/QzDZELOzLiPa7hcZMy7mOJ/vMn/fO8HvH9DLvi8mMB186+Iax/BwE8yfkIIIYQQtmDWL6y0erxj++bPny/ZPiHaoXjGAAMUFe/kyZe+x5MvfY9XVt4HHMv6gYEadDJHSusXjnQ98SQG3HMv/U6YbI8DBGZkZJFy9Ehc23fkqp4S+AkhhBAdUHlZJctf+JwjZVUx1+mfcSpGzaE0uE0XhhG5LHuAaZrcfPPNTdFUUYfqgwcp+tvr+CsqWrspooOIZwxwKLdhcGJ6Ij+461R+cNep/P7x+5kwYSKPPnE/l1w3qVHtGNW3P/N696Fy5664tgmM8TOluIsQQgghOoK1q/Mp2FnCmtX5MdcpKzYZ22ckbmfSZLdhML7faNSgKbhcUebkMk3mzLmIrKysZmm7qGnvwqcoev01Sj9e3dpNER1EfccAm8DV35pVY/vw8XsNbcdjd/yUbp4EKnftrHN9y7LwBat6JjXq2McjCfyEEEKIDiZQdAEg78u9EbN+oeuMGHtp8Om+aZiMGH0xE3JmgRVlLi2QsX0t5OiWzRzN2wBA1f79rdwa0ZHEm/VzmyYzMrLoPXpMs7QjoW8/gLgCP39FBfh8GJ06YXoSmqU9bZkUdxFCCCE6mNAS65ZlsWZ1PtPPGRZ1nS6JqUwaM52PP3+PSWOmk5iYimW6UYNOQm/7CJ/fh8fjoV/ffmzbtpXTevSUsX1NLK5iGms+QS1bwpIly1umUaJDC2T9li97hWqfN8aaJuf3HULnQUOapR2d+vQBw6BqbwGW14vhjh7edOSpHEAyfkIIIUSHUV5WyavPrSNv/d5giXW/z6qV9Qsvw26ZboYNOo9Ro8YxfMhMLNO+sZow6nxw5uQyTZMHHvwN2SldmZvVU8abNdD8+Rcwblx2rX/xVFB0myZjx45vgVYKYcvNXYCBFXW5y+Vm+KCpHOo7FU9m8zwMMjt1wpOVBT4fVQUFMdf1d+DCLiAZPyGEEKLDWLs6n/17Dtd6PTzrFz7pMthZv5nTf0TJoaPBgDApMZXswSfzzeZVzJlzEdnZI3nglBlUF+7He6gY+knWr77GjBnH1q1bqK6urve20sVWtLRUC2Z0T+fdA4V4rUgBoMHEUTPZk5jC0fJquiQ3T/fKWz9ZzdaiA3D+WTHXG9Z/IL/K6imBnxBCCCGOf3HPr9WtL/PO/RlwLOs3aeoALKxaky4H1ikuql0uffzImRws2cNVV3wXAHdamh34FRc3wdl0PA2dO9FtGMxIz6R7StdmaJUQkZV+uIq5vfry3sEi8PkwTRPTdOH1VuMyTLIHnkSXxFQgcpfyppIzeCg7DhZFCT5tbpeLET16gAWuDljRE6SrpxBCCNGuxDO/lmm66JFRc7xNIOsXKdsXS1JiKhecdTvb8uxKee5uaQAS+DVQfaslBpiGwbzeffAWH2ymlglRk+X1UvLhKtISEph5xtkYhsHMmbNxuZzwwnTZ3cEBP0bUQlJN4TuXX4lRxzqm38+sKjuT3hEreoIEfkIIIUS7Ek+lPcMwmZgzs8Zrfp/FhvUFNcb/xSt0nKA7rRuA3dVTNEisz9A0Tdxh02h4PB7OHDKMbp4EqouKWqKJQlD2xef4SktJ6NWbH9x2F+PHT+Smm261J1U3DLIHn+xk+2yBh0vNofeoMZyWkRmcdiac2zQ5K2c0mX37YXg8dBmR0yztaOukq6cQQgjRjgQr7S1/NeI4MdN0oQbVvCEL8Pss6nxsHkXgpm60k/Grloxf3OLtngtw7vTTefv9d2u8ZpomV04/Db74nOqiA83RRCFqKVn1HgCp008lLasHCxcuAuDKK67nw/fXMmFk7YdLgS7lTT3Wz5OewbyBQ/j3gcKIy10eD7f87o9kZGRiWRZGlACxvZPATwghhGhnYo0TMwyTgv2bePKl79W5n9BxgHXx+yz27i5h/JjugGT86iPegi4mMNdv4c3I4N2DRXh99jQac+ZcRFb/ARz84nO8ByXjJ5qfv7qKI3kbwDDoOmVqjWX5+ggXnHV7xJ4D0aaPaSzDNOk5eAinbd9Sq9BM4DsSmGKmowZ9IIGfEEII0e5Ey/oFsn1gUVK2D7/fF3UfbsPgjDOn8oO7Tq3XsY9u2QzIGL/6iLegy7T0DFKOlHPZpMm8/+5beJ1iGrm5C/Bs+AZAunqKFlG1ezf4fCT06l2jQmb4VDDhmjPr16l/f+b26su/DxyAkCkmAt8RIWP8hBBCiHbJnl+rpsDYvgk5szCM2LcApstF7vdvqPdxg8VdJOMXt3gKurhcLm686VaSxowl55bbg+OoApkMd3oGAF4J/EQLqMi3x+p16j+gxuvxFIdqrrF+3b81k6GXXMrsWbOD36XwbF9HJ4GfEEII0Q5lZmYxfsgkTNMuBBI6ti8pMRU1aEpwWTi3YTJ71pwG3Sy5U1PBMPCVlGD5omcUm4u35BDbf/YTDix7pcWP3Rh1FeWZOfN8hsy+kD433kJCVha5uQsYP35iMJPhSU8HoFq6eooWULljOwCdB9QM/PbuLq2zOFSgW3hT83RPJ33WbL5/44+C3yXJ9tUkXT2FEEKIdmr8sDNZs2kN4KtVyXNCziz0to+B2sGZK8HD92+4uUHHNNxuXCkp+EpLqTp0CGieCZvB7lb29usbOHvOyGC3sUP/fpeqgj0cOlRM+pwLMVyRg9u2Jlr3XLfbTVpaGjfeeGut9QPFNADc3Z2xlcXFWH4/Rh2VXYVojModO4DaGb9LrpvUGs2pIfBdeuWVJZLtCyOBnxBCCNEO+crKOH3vv9ians7bhfuYO3cet/5kdo11KhPW1Qo0mqJrlLtbmh34FR2EtJ4N3k9d1q7Op2BnSbBYhOX1BisN+o8epWL7NhKHDG224ze13NwFvPH6shqvuVwuFi9eVufnYXoScHXtiq+0FO+hYjzd05uzqaIdiLearFLZLFmyPPi75fVSuTMQ+PVvtvY1Rm7uArZs2SzZvjDyOEgIIYRoh45u3gSWxRVTp9XoEhgqUvfCpuga5U6zx/lVFTXNZOLlZZUsf+HzGpM/B4pIAOR9uZcD+8pY9tRHHCk/FsQe+ebrJjl+S8nMzOKcCScE5yKrbxDuCY7zk0ncRd3GjBkXc1wp2NfgyJFjanz/qvYWYHm9eDIzcXVpmxOhBzLiku2rSQI/IYQQoh06ulED0GfsuKg3QOFFRZqqEEKgwEtVE403C83shb4WKCJhWRb/emMD+0v8bEsbS5ecUQAccSpdHk/m9u4bLMpT3yDcHRznJ3P5ibrVNa4U7GtwYs7MGt+/aN08RdsngZ8QQgjRzpSXVfLO5kQqXYkkDlMx1w29+WuqQgiBjF9lE2SewjN7R8qq7NfW7w0WkfD7LIqLjgAGBV2HkXLxlWAYHN2yGX9FRaPb0FJ8R8pJ3L2L0zKzalTsjFege6dU9hTxqKuarMfj4bzz5rBnu53pC3z/KpzCLhL4HX8k8BNCCCHamTXvb6XYSGVb+jgSh8aeKDlw89eQQCOaYMavCQK/8MzemtX59ms+f9iaTiVB08UXXx+m88BB4PNxdNPGRrehJZSXVbL8ubVUksAVU6dH7Z4bSzDjJ4GfiFOsrF8g22f57e9a4PtX6UzlEF7RU7R9UtxFCCGEaEfKyyrRX+8Hw6AgZRgV1QZdOsXepqkLIQTH+B1sXOAXKbO3YX0BBuCvPUshAEtX3k/RS7uOvXzVJRH3HV6worWtXZ3P/kN+PGljOWVyfxbec1+99xEY4yeBn4hX4MHPa8texhsy/Uow27etEifuC06+3n3XfhKATv0k8DveSMZPCCGEaEfWrs7H8jvZL8OMa6Lkpi6EEMj4VR5oXAASKbPn91n4YswT1iNjcNT5CQM8Hg9jx45vVNuaQumnH7PniT9RvHmH053V7qpqDBvVoP0Fp3SQMX6iHr773R9ghk26bmIwfvjZ+L3eGq9bfj9bk7Jxdetmz9kpjiuS8RNCCCHaicB4uEA2zI9B3pd7mTR1QHCeu5bgTutGpSuRteZ40g9XkpRyLOUYbwn5YcMUZ02+zc7gHdpV5/rp3foy79yfxZyfMKAtTOrsr6xk/6Ln8B89ypqdHqyUYYCBZRh8ubmC6UPqv89jGb+DWJaFYYRnRYWoLaWkhBnpGbx7oBCvZeE2DKb36ktBfjWWUfMhit8PBV2HkZNUHWVvoi2TwE8IIYQ4DsUbQKWn9SN79J+Yfk7ssX5NyUzswraMCRzqlMmaVVs4debI4LLRI0ezZfOmGt3Kwnk8HnqkD8ayLHpkDKa4tAC/P1Yg56JHhh0pJSWmogZNIW/r6ojbNFXl0sY6vOYz/EePUpXYjYKkwcFg3TJc5H25j0lTB9Y7WDe7dMHs3Bl/RQX+8nJcycnN0XRxHIvn74bXsvi8qIQhfj9EGP9nAVs6DacBzyZEK2t04KeUmgncB3iAg8A1WuttSqntQIXzD+BOrfU/nW1OAp4EEoHtwJVa6/2NbYsQQgjRUYwZM46tW7fUmHw9nGm66JE+uMWzfkfKqyhIHgKGgf7mACecWhU89ry+/XjdH16YpSbTNBna5wz8PiuuDJ5h2EUoAmJt0xayfQAl778HQMHEC2Efwdo0cKyIRn2D9UsvvfDYTf0pk6Ku19bGN4qWE8/fDcMwyOo5EsuMHCZYppvtpW6OlFW1aE8C0XiNGuOnlEoD/gpcqrUeDTwFPB6yyjyt9TjnXyDoM4FFwA+11sOBVcBDjWmHEEII0dHEMwdXICAKBBItZe3qfCynm6HlP3Zsy+8nIW8Dp2VkBicpD+fxeDhh/Okkdu4KHMvgRRu3Z5ou1KCT6ZJ4bLxRtG1aI9s3f/4FjBuXXevf7KUvcMmaT7j9d9/j8cXf45WVx4q5BIpohE5YH48xY8bhruOaaCvjG0XriOfvhsvlZtLo82OuY0GL/k0RTaOxxV2GAvu01oFayW8C5yilMmJsMxGo0Fp/6Pz+BBC55JYQQgghIqprDq7QgKihgURDBMYZWs4tht8Kmf9ryxa8xcVcMnIUpjtyNsE0TSbkzAxW8gQ7g2cYkW9ZwrN9sbZpjWzfmDHjon5GAaFdVQMaEqzHOyF3W8h4itYRz9x9Y0ZMp3Pn2IVb/H7Yu7ukOZoomlFju3puBHoqpU7QWv8HuMJ5vb/z3xeUUgbwIfATrfUhZ1nwL5nW+oBSylRKdddax133OT29bfZbz8xMae0miHZKri3RnOT6Oj79+Md38MYbr0VcVisgsiy+XreH8+aObtY2fbZqO4RVCAwcO7vovwBkn3Umlw7oy+IXX6Q6pGpgQkICl156KXfeeyEAeQ/9L0Uff8Kwm27ATL2MxYsX1+iilpCQwGWXXcYDD1xBJGbqV7z4/PN4LQuPx8Oll17KiBGDm/aE6xDrMwqIFLz6fRb6q72cM3skyV07x3WszMwU5p5/Pi8vX443/DPg2Pvb0u9Bc5K/XfUX65p0uVw8/dxvyMrKauFWtU3t7fpqVOCntS5RSs0H/k8p1Rn4B3AI8ALTtNY7lVKdgN8BjwFXNrbBAUVFZfj90cs5t4bMzBQKCw+3djNEOyTXlmhOcn21HeVllbz9+gbOnjMyrrEzptmF2bMvZNmrL+MLKWQSqfujz2exbfOBZv2sy8sq+fyznbWmW/D5LNZ9uoNNR92MdiXizhnHVZNPYcmSJRAS+BmGwVVXXR9sY8mmzQBUde/JVVddb68fInz9cFdddT0vvfAC+HyYdazblOItvAORP6sAv9/in298U6+xftctuIVlK1bgraqd3a3r/TreyN+uhjHNLsyeOZvXXnsVr3VsvK3H42H27AsxjER5X2n715dpGvVOhDW6uIvW+l/AvwCUUj2A24EtWutyZ3mlUupPwBvOJjuA4IyPTrdQf32yfUIIIUR7tHZ1PgU7S6IW9og3oLAsP48+cX+LV65cuzofK0KmCewMVomnO/m9T2LUwEF0Ngxmz76Q5cteodrnxW2YnPetOXz4z92cPSeVTlYl3gMHMBISSOjZi0yXy15/+atUV1fHNV4vMzOLs0aO5s0vP+fcEya32PsRTwGNgGhdVcF+z+rbnS4zM4vZcy4Kvk8BbaWaqWgbLuzRi+WEzd0n3YDbvaao6tlTa73XKdryAPaYPZRSqU5G0AAuBT53NlkLJCqlTnHG+X0feLmx7RBCCCGOZ4GxcUDUKpzxBhSDBw9p8Rv84ByCMSZXxzDY3XkAR8ur6ZKcQG7uArvLmc+LicXYvlODge/EPnZR8E79B2C47CItwfWJ/yb1mllz2LptC5eNP6HxJxmn0HbG4nZ7uOiiedz6k9nNfvzw96u+2WXRfpSt/wL3fz7jtMwe/PvgAaq9Xnkw0EE0trgLwP1KqQ3AJqAKuAvoAbynlFoPfAUMBxYAaK39wFXA40qpTcCpzjZCCCFEhxWaLYtW2COe4h0ADz74myZvX11iZftC+S0jeG6BQhOGYTAtsxf7DtgBSN6XeynI28HaPt+CvsfGo4WuH+9Nas+hQ/lldg4pR8obeGb1V1cBjQCXq3kyLOHHdxsG5597Xo33KzS7LKJXXw3/N3/+Ba3d1EbxV1ay75mnAfjud76P6TxUkWxfx9AUXT2vj/DyViBqrWCt9UdA844uF0IIIY4T4dmyQBXO8Kxf4IY+vBtfqCFDhjJ8eHaLtDvU3t2lsbN9IULPLTd3AZs35jEh40QO+y0w7cD34y0uyjr3YKPfDFaMAzv43bJlc9w3qQlZPQGo3t+y0wXXlfVzu5s3w1IjOwpcPvmU4LJ4sssdTTzZ9PYwFUZF/nZ8h0tJ6NWbARdfwuzNebzyyhLJ9nUQTZHxE0IIIUQDlZdV8soz67B8NSc1b0jWzzCMVsn2AVxy3SR+cNepNf79/JFZ5IzvhRk2lij03DIzs3jsj3+lLHM8ljPvnt9nUebvDIbB1n3UmIYiMzOLhQsXxX2T6nGqE1YfKMSqY+L4phTMurkjZ/2aK9sXfnzDMJiRkUWXgj3BZWs+2Ba83lp6jse2qqNMhVG5aycAnYcMwXDOZ/z4icf9eYn4SOAnhBBCtKJP3tvKkfIqwgtVR5t771hAUbPTjsfj4eKLL22VbF80h0sr7EwmNSdrDz+3tavzIcpNd2MnijY7dcLVrRuW14v3YFHw9dJPP+HIRt3g/cYjN3cB4fPUm6ZZr66qjT3+uJGjmNe7D0fyNmBZlp3tW783eL215ByPbVk889u1h6xYlRP4derbD6j/gxRxfJPATwghhGgl5WWVbPw6ehfEWFk/IyxQbIvZiFVvb4o67i9wbsFuruHJOCdiaorAJCGrBwBV++zujZW7d7P3qSfY+9STDd5nPDIzszgreyRu51w8Hg8zZ85usQxLZmYWC59fQnpaOt7ig1Tv28d/3ttcK/MpWT9brKxfW/x+NURlWOAnOhYJ/IQQQohGKi+rZPkLn9c7OPnkva0QY1hcpKCnvKySD9/cwbTMHjUCiraWjSgvq+SLz3ZGHfcXOLdP39tWZ1GYxgYmHifwC4zzO/L1lwB4iw/ia8aiL5ZlcWH39GC+0zRNbrrp1hbNsBimSWK2nQUuWv8N+utCLMNVYx3J+tmiZf3cLhezZ81pU9+vhrD8fip37QIk8OuoJPATQgghGqm+FRLLyyp59bl1bPyq7oIj4UHP2tX57C0oY0L2ecHsRFvMRsRT5dPv97Px6zqmgKDxgUmCM86var+d8Sv/5uvgsqq9exu0z3hU799H1/IjnNazd4t174yky4iRAPz3i6Ko4xwl62fLzV2AGdY/1/T7OfdAEdVFRVG2alkNrUBaXbgfq6oKd1oaruT6Tfwt2gcJ/IQQQohGCK+QeGBfWZ3Zv7Wr89m/5zAx032O0Em8A+OzwKAsaxznnHpmqwYUsezdXYqvjoDO8kMcM0DY6zYiMDmW8duHv7qaoyFj+6oKChq0z3gcydsAwLfPOLtVC2h0yR5BpSuRndXda2X7AiTrZ8vMzOLs0eOOZdPdbk4fMIiU8nKK3/5n1O0q9+xm33PP4C0pibn/hvYOCDVmzLg6pwqJVIE00M0zoY9k+zqqRk/nIIQQQnRka1fnB7MolmXxrzc2UFx0hDWr85l+zrDgeoEJs085cygb1geyTEat/Zl+L9MPvc2Ihx+qse3yFz6na2pn51gGlmFy4pTL2H2oqM1l+8Cu8pmZmUJh4eGo6yxduIai/fF1tYw2xUU8Enoc6+pZsWUzVtWxm+6qvc0Y+G2wA7++E09g4W13Nttx6uLJ6kF+rxMjPmZ4ZeV9FB3aFfz9T4si70OpbJYsWd48DWxDLL+fOckprHR+N10u/ucX91P+2KOUfrSajLnzMD21r7/9i57j6EaN4Ukg67Irou4/0Dvgo1c+ZvA3b5B12eUkj59Yrzbm5i5g+WvLYq4TqRdAsJtnPwn8OioJ/IQQQogGKi+rJO+LgmBhkqUr7j12E/0SEOle/38hvVtf5p37s4j7tAyDTeZAVEUFZufOwLGbxb27SrAsw1nPpCC/msceXXjczsF2yXWTgj+v+udGNqzfG7PbZyDrFxpQx8OT6UzpULif8q/s8X3u7ul4DxY1aeAXCO7PnjOSxC5ujmo78At0tWwthmFQmtQby1f7tq9HxmCKSwvw+31Rt3e53Mf9/HWRzJ9/AVrnxVynsrKSHz14Lw+PGkdl/nbK1qyh65STa6xTsSM/mEUu/fRjMi+ej+Gu/V6H9g7YssdLj5IjHFz5j3oHfl0SUxk+aAobtnwY8XOLNua3cucOQMb3dWQS+AkhhBBxsiwLI2T8z5oP8/H7/QRGTsRzE22aLnpkDIl+DMNFQddhHNq+m+7ZQ2rcLFp+i9D5ARoaCLVF8UwAH9rttT7Mzp1xpXbDV3KI0o8/AqDbaadz4NWXqW7Crp6hYz0n53TGd/gw7rQ0PE7GsTVddPFw9j33LFmXXUHisOEAlH/9FaO0l5sNE4h+zYLBVVd8N/hbaIB7vD50gPgmbQfQOo85gQBxzScR1xmY2IWHc8bgLyujbP0XpEyoHcytWbUVv9cLmFgYbEsfR/aWj6kq3E+C83AiHmtX5zNx9Ezytn5EpM+turqapUsXs3Tp4uBrSmXz0CD774QEfh2XBH5CCCFEDIGb3GljOnHor0/SdcpUMudeTHlZJXp9AVbIcPkJObPQ2z4m1k20YZhMzJkZ85gWsO6zPZyZPYS1qwPBJYRPCteY7o9tTWj2rzkkZGVxtOQQvpJDGG43qdNO5cCyV6gq3I/l9UbM0NRH+FjPof6jACRmj6jxsKC1dB44iAE//2WN17qobA71ORlV6iJv20cRH1iYpovswSezLa+cfgPs1wIB7sUXz2F3wbY6j92c3UTjydpFa0Nu7gLeeOO1mNuZpolpuvB6oweHbsNgeHIKqaedQcm/32H/h5/wzgZXjcC4ZNd+8r4oCI6xtEwXBV2HM6jocw5/8jHp58+p8xzg2DjfxIRU1KApfLN5VZ3beDwexuSMoXrHDgy3O9j1WXQ8UtxFCCGEiCF0TI7v0CGK/7GCktUf1gzIHEmJ9s2YaUYuoGGaLtSgk+mSmBrzmJbpprCoKhhMWJELMdrrSjXGuIRm3ToPHYYrORl3ejr4fFQX1l1dtS6hVUwtv5/P/3sAsAurtFVHKnzsSR7ChFHnYxiRbwkNw2TCyJnBwi+hAW635P4NKjLSlBpa6ATim7R95szZuFyxb5dN4KqzziV91mwwTb4ucNeo8luRv51VT62oXeXWMNmWNpbSTz+uswJuwNrV+Vg++w/ChJxZmGbdDyxM0+Tqc2cBkNC7T6Mfcojjl3zyQgghRBShN7l7Og1gaHpvXEV72Ll4KXn9LqqR7QuIlfWLlu0zXQYjxvRi+jnDKFn9AfueeZqUEyezdnU//L4YUR/tK+vXnAKTuAMkjcyxX+vZC++BA1TtLSChV+8G7zs4Cb3TVdXvh530oJ+nC11G5DSu4c1o7ep8MM3gA4u8ratrZP1CH1Qce8BgBYOUCSO/hd7yYcxjNPdUI7m5C3j99bqzdtHaECvrF5h3sXPnzixf/mrELqFuw2BGRhZDZl+AOzUVV84ECsqHAnbmVyUeoHDpYvb0noMVEqSFF9Xh75EzoqGZyuB15hSFSkpMJXvwyTGzfoHxfq7iMtb2+RZTejXfvJWi7ZPATwghhIhi7ep8LK8Pu4qmwb5TLif74Gd8lleF3+eDCE/b47mJDhcavCX07AVA6d6D5JXui2u6g/Y01q+5eEICvy4jRwF24Hfkqy/tKR0akZSKOGehaVJ4+nWM7t694TtuRsEgwnmuEOmBhd/v45vN7/PN5vftF16ovZ9OCUlQfQRvlAu1srKSM8+cFvw9nm6f4WNpY8nMzOKECafz8Wdv1avQSej2s2dfyPLXXqHa6424XczgELhs4okkqmwAtqWPxyqvsM/D6+XTN7+GlJFg1nxIFM944PBMZWi2L2BCzizytn6E3+8N39xunxP0rln8CYc692CT4WNg1COK9k66egohhBARBCt2Eqii6WKjLiZ5ziUc7tq3xtP7cBNyZtXqOlfX2L5A8JbQoycAujIr7u5fDS160pEk9LTfVzM5mU79+9uv9bKD7MZU9gzP9gX4Mdmcf7TNzosXHqxG7qYcO/gyTRcD+oyGKF2bI9E6r86Jxy+aMYXdf/hdXPsrL6tkaO/To3ZVjSfjmJu7oNaZhm4XrUtoMNt34UUYhkF5WSVbC/zBvw1+TPZ0HUZBt2z8Ybfckf5GxGp78DoL+5MQyPrZap5FIHhN7NyV/LIkMAy2HXS32WtSND8J/IQQQogIQufnC7Asi3WfFnBJ7hTO7/QfrpjuJmd8L0xXzRuu8JvoeMb2BYI3V3Iy1V0zKEgaHLPKpcttcvUNU/jBXafyg7tObfbiKMe7hD59yZh3CT2v+y6GkxD9GK0AACAASURBVH0JZFcbE/hFzPY52ur4y2jBamgwYppuXHUEdIZhMnnMRajBU3GZdd9SmqaJ2x17PJ7LdDEsoRPlX3yOt+RQnftcuzqfLs73LZJAxjE0sJw//4Lg8vKySj5cuYtpmb2OTdoeIUuYm7sAM+wcXZ4Ebn7k93SdPCXYFitstkTLdAcfHoWqazxweBtiXWcTcmaR1X1Qrc/LNE36pZ/KJ//eGmyVhdEmr0nRMqSrpxBCCBHGrpy3r9ZT+tAumX1vuQ2AvQvXRAzQQrvOxTO2L1Cd8IFHA0v/HrFtgTkApXtn/RiGQfdzz6vxWmBcX1VBQb26FwZEC6AC2ur4y2hBRCAY+WbzB2QPngpYtbosB4Q+zJg4eiYbt32Mzx89k+TxeDj33Jm89dY/8EbulWgzTM7vOwTwc3TLlojTIgQcLq0Ivv8TcmbxzeYPIOI09TXbEd59cu/uUiaoc/lg/0Lw+SJmCYNdQp2xfh6PhzkXXETvMeOAOq6FKE2KNR7YsmpOoRFrupOkxFQuPPsuPljzAnrrR/j8XtyGwaScUygrNthUvD9YTdTvb5vXpGgZEvgJIYQQYSJl+wLCA65ombalC9cEb6Jjje0LdNGMZ06x0DkApXtn47lSUjC7JOE/Uo6vtAR3ard6bR8rCxPQFgP0WEHEhJxZFJcUMDFnJhbEVagoMcGeUFxvW403SlQXT6EU03SRPfAkDg8/jR5b3qJia+zAb9Xbm+y5LbGDn2EDT2TT9k9jnnuk7pNgUJY1jrNPPpUVH/476pjA0LF+4cFhrGsh9AFPuMqEdbXeD5fLzfCBU2pMoXHJdZPY/fvfUv7lejIvu4K0M86qta95hSOYNessfJVeDAyG9rPXsaz2O/+nqB8J/IQQQogQ0cbSBMSbxbnkukmcdn5/7rzzRzz88P1Ri0sExDOnmMfj5tEn6t6XiC3i3G+nnlRrvboKkTTnpPPNqa5uwbcxO/hzZcI6li17BZ/vWEAXqetyIOsXSbyFUgzDZMKo89nlSqWfK5GKLZujtrG8rJIvPtuJP+SLOnnsXDZt/4xoKbaI3SedYimWYTB52lXsKS+NOiYwkPV75ZUlNfbTmMxv5PfDYGLOzBrbeEtLKf/6K3C5SDlxcp3tG9dvNJ07pTi7a7/zf4r6kcBPCCFEhxfvJND17WaZmZnFwoWL4mpDeFeycHVVJxTxiye7Gs/8c5dcNwlvySG23nYLmCZDfvsorqSkpm5uq8rNXcBry16t8VqkrsuJCamMHjGNdV++g2m6wira1i6U8tqyl/H6okwdgcG2tLGMyF+H5fVGnHcuUoatrqxfaPfJ8Ac8luGiYIeXxx5dGDMYys1dwJYtm+PO9h07duS/GeHfe5dhkj1wSo0pNKafM4xD77wNfj9JY8fhTukas32bNm5i5MCLI1Ydrqs9on2T4i5CCCE6vHgmgW6JbpaRCkgcO37zzofWkcR6nwPifb8Pr/kPWBZJo0a3u6AP7MDkwovmBr8fHo+HuXPncesvZwcLCwX+/fq39zBhwiRmzjwft/P+etzuWg8svvPt6zDCAqXQYNLvtyhIHU6Fz0Xlrp212hQI2nwRMmyTx86lS+eutYqmhHafhOjFm+oqfBJ4mBN6Po3N/Na4Hk0XE0bNCm6zYX0Brz7zH/a+a8/V1/28WXW277rL7yGxS1qd7cn7cq9U+OxgJOMnhBCiw2sr3SyjZf0k29e0mjK7evgzO7uUcmLtrqLtRayxbaECQVFh4X7++Y+/g99PtdfL0qWLWbp0ccxjuF0JNcfBGnbWr++WzXQeOKjGurEybEmJqVx0zt0s/vtPqTk28Vj3yZHjetWYwzCgoV0gG1tRN7SLZvbgml1o/T6L/fvK8SSNYOLwChKHDI25r0BQLPN/ikgk4yeEEKLDizZPV0BLBl6RslGS7Wt6TZFd9R46RMWWzRgeD8ljxzV1E9uMwPfDMIy4vgeZmVmcN+1UDKB/amqd2XSAAb3H1Pjdj0lB12Ec2rS91rp1ZdgC1UldTlfH8O6T/3pjw/+3d+fxUZ3n3f8/58yMhCSEBNKI1exwAJlN4H2J8W6DBV6x66WJk6gOedL80jiL2/RJm7RpHqfN0iapk6ZO0thJ8IrtprFj11uMTWywMYvRYRcgJCQECC1omzm/P2ZBy8xoJM1oNNL3/XrpBTrnzMw9w82BS9d9X1evxZsG2z13f4oJ3tmULIjU69Ogaswcsq8rjXCuq3iWnYYMxf2nklzK+ImIiBA76zeYgVfEsvHK9iVcIrKrTds/BCB7/gLMUaOSNtahINLetlge+NxfYb/3Lp+YPpu/Ld/Ry9UGFyy+ucdRB9h5zMOMbsdDGbaMmsPs+Ou/JXPqNKb937/vck3nCpfdl0+erGuOOpJUFT6psJtZc82XoheIMV1sP+Dj8rnRn6O3IjMQ6P95zwMXqKjLCKWMn4iICKEsxRXhJs4hqQi8OmejlO1LnoFmVxu3BQK/nEWLEz62oSbS3rZYJsycxbcuW8F0j4eVV14TM+s3d/qFEdudPPmHf+Jrz367S/P1zl8Lrr2GOzZv4gt/fC3ieENZyu7LJ3vr9TfYWb94AjYwKN8We09eX4rMyMikjJ+IiAjQcvAAN9Sf7tE2PRWBV7Sy8ZJY4azfs0/T3tGO2zAovfGmuD5vf3sbzTsDmayREPj1x6jZs2mvreHuCy7id6++HPGazMxMfvyzhyN+5oe2fJc/1Jv4nMjLMgHchsHCufMinrvn7k/x1htbIiyfNCJeHzLYSyDjXZ7p8/tj7slL1/YiMngU+ImIyIjXXltL5fe/S77jcG3xufzBLk/5Msu+Lq2T/nn//c20dwSWenY4Dk8++xRPPvtUj+u69/Q7Y5fjtLWRec5UPOMKBm286SRr1mwa3nmb7NraQAuHp5+go9Peut7+ft15w8384Yf/AjECPxP49P1lEc/FWj5pOD4saywrbondsmMwxBOwAeAQcxnqQIvMyPCnwE9EREa82id/i6+xgezic/n8XXfzyurrgdQus+xLD0Dpv5KS5Rw4sB9/lGIfIbZdzpIlETJLmzfBs08AvTd8H2myZgUyU2f27eXj99zHhqfWdznf29+v46MsrBkXUn7g7S59AUPchsEV3iImLVrU41xvyycdw8We/Y1c0NiW8v1u3QO2N1/aza5t1RHHrkqcMhDa4yciIiNWU2Mrz/zsHeo+/AgjI4MJn/gkRRMm9qmCoaS3srJ1uCM0CO/MNE1cvSwPjKfh+0iTMXky5qhRdBw/jv/F37Oi0IvbFeiv11u2r6mxlX2V7ZScexOGEaX6KnBXyfmYnp6BW7rud+stYFX/PRkIBX4iIjJibX6rgmPHWzkwdjFjr74Wd36g6XFZ2TqWLl2mZZYjgNdbxOrVt8Rs5XHN0mWYseM+FeGJwDBNRs2cBcCZ8l3cOmUarmDg19vntWVjBQ5nWzN0b8judrm4orCIiXOtiI9P1/1u6RqwSnrQUk8RERmRmhpbsbdVAQZVeXPIvGxZ+JyWWY4svbXyuGfWXJxDFbxad7zLHrUQtdyIbtSs2TR/tBOA6SuuonT2rF6LFnXPepUUr8I+8A6dG7KbfofbJk0mc/r0iM+Rrvvd0jVglfSgwE9EREakzW9V4Pf5wHCB6eKD92u5/Lr8VA9LUiBWT7/Sm9Yw6shhbp04hTfqT9HR1nOJnbJ90WXNDu5Fc7kYd+NKyhyn16JF3bNeoaxf+f6N+P0+XIaLKwoLyfdkMGrqtGS/hUGVrgGrpAct9RQRkREnlO1zjMDyMb9jaN/MCBetp999V12L09bG+JmzKF19Cx531yWhyvbFlm3NI/eCi/CuvQtPobfXfoDR9riVFK86u9fPNFk9uxhXTjaZ50xN9lsQGTYU+ImIyIizZWMFjr/rfyy1b2ZkC2X9Qnv9Qj39RlVWApBTXBwIDl39b/g+EhluNxM//ReMvfLquK6PtsctlPWDQEP29hs+w+J/+Q5mZmaCRywyfCnwExGRESWcUehWpVHV8qRz1s8E1py7nP/dnUGrK4vsBef2CA6V7Uu8WHvcSopXMdE7m5IFK6k53krWxAmDPDqR9DbgPX6WZa0Evgl4gBPAx23bPmBZ1lzgl0ABUAfcZ9v2nuBjop4TERFJplhV89Qja2QLBXZPPbWeKwqLOLCrkZOuKRwoWErxnLlA10IwyvYlXm973B6kdJBGIjL8DCjjZ1nWWAIB3J22bS8E/gP49+DpR4Af2bY9F/gR8JNOD411TkREJCnUI0t6U1a2jqWLl1I6Yx6V5kQwDKrGzKElOCVCwaH6PIpIuhnoUs/ZwDHbtncHv/8f4DrLsoqAEuA3weO/AUosy/LGOjfAsYiIiMSkHlnSG6+3iEd/8Wsa5l1HeKYYRpc5oT6PIpKOBrrUczcwwbKs82zbfg+4O3j8HKDStm0fgG3bPsuyjgaPGzHO1cb7wgUFowc49OTwenNTPQQZpjS3JJlGyvw6fqwprh5Zx481jpjPJNnS8XNsON3CYV8BTvDH437HwN5RzXWlCxg9ZhReby4vvPBcagcpQHrOL0kfw21+DSjws2273rKstcD3LMsaBfweOAUkPSqrq2vE74/9j/dg83pzqa1tSPUwZBjS3JJkGknz65b7lgLQcqiCQ9/4OhmTJjP9G/8Y8dqR8pkkU7rOrTdf2o2DAWdzfvj9Di89/5H2fw4h6Tq/JD0M9fllmkafE2EDrupp2/Yrtm1fatv2cuCHQBZwEJhsWZYLIPjrJOBw8CvaORERkaTrOHECAPe4cSkeiQw10faBav+niKS7AQd+lmVNCP5qAt8CHrFtuwLYCtwVvOwu4APbtmtt266Jdm6gYxEREYlHx8lA4OdR4CfdxFP1VUQkHSWij98/WJa1C9gDtAFfDR5/APicZVm7gc8FvyeOcyIiIknVHsr4jVXgJ2ep6quIDGcD7uNn2/anohwvBy7o6zkREZFkC2X8FPhJZ32p+qq9fiKSbhKR8RMREUkr2uMnkVRXno6r6mt1Zf0gjUhEJHEGnPETERFJN9rjJ5Hccf/yVA9BRCRplPETEZERxXEcOk6eBLTUU0RERg4FfiIiMqL4GhpwOjows3MwMzNTPRwREZFBocBPRERGFO3vExGRkUiBn4iIjCjh/X1jx6Z4JCIiIoNHgZ+IiIwo7SeV8RMRkZFHgZ+IiIwoHWreLiIiI5ACPxERGVHUvF1EREYiBX4iIjKihDJ+6uEnIiIjiQI/EREZUbTHT0RERiJ3qgcgIiKSTGvXrsG2y3ueuO6KLt9a1jzWr98wOIMSEREZZMr4iYjIsLZo0RI8Hk/MazweD4sXLx2kEYmIiAw+ZfxERCTtRc3qxck0TcrK1iVwRCIiIkOLMn4iIpL24snqRePxeFi9+hYKC70JHpWIiMjQocBPRETSXlnZOkyzf/+kKdsnIiIjgQI/ERFJe15vEaWlN0fN+pmmi7FjJuIyuv6zp2yfiIiMFAr8RERkWIiV9TMMkysv+iSYri7Hle0TEZGRQoGfiIgMC9GyfqbpwppxMYVjz2HejItxuQJ1zZTtExGRkUSBn4iIDBtlZeswuh0zDJNlxSsBWFq8EoJXKNsnIiIjiQI/EREZNrzeIq6eY4X38oWyfdlZeQDkZOUxb+bFGIahbJ+IiIwo6uMnIiJpKZ7efX6/j6qa3V2OLV2wkhP1R7n37k8nc3giIiJDijJ+IiKSluLt3TexaG6X73Oy8lhzzZc4UN6UrKGJiIgMOQr8REQkLcXTu8803eH9fZ35fQ7VlfXJGpqIiMiQo6WeIiKSlkJVPDdseJr29vYe5z0eDzfffBtf/OvSFIxORERkaFHGT0RE0lasrJ+qdoqIiJylwE9ERNJWtN596tEnIiLSlQI/ERFJa5Gyfsr2iYiIdKXAT0RE0prXW8RNN6zCbQQasyvbJyIi0pMCPxERSXv3XXsDRvD3yvaJiIj0pKqeIiJDSDxNyQEsax7r128YhBGlh9zGJlYUenm5tlbZPhERkQiU8RMRGULiaUru8XhYvHjpII0oPbQeOcytE6ewcNYsZftEREQiUOAnIjKExNeUXEsZu2s9cpixGRn85NvfU7ZPREQkggEv9bQsaxXwTcAIfv29bdvPWJZ1EGgJfgF8xbbtl4KPuRD4CZAFHATusW27ZqBjERFJd701JQdobW3l6qsvC38/0pd9Oj4fbUcrAciYMiXFoxERERmaBpTxsyzLAH4F3Gvb9hLgXuCXlmWFnvc227aXBL9CQZ8JPAZ81rbtucCbwLcHMg4RkXTX1NjKhse30tzYFlfWL0TLPqGtuhqnowNPoRdXVlaqhyMiIjIkJaK4ix/IC/4+H6iybdtvWVa065cBLbZtvxX8/hECWb/7EzAWEZEhJd5iLSF/951ABu/axUv5n3c34evlei37DCzzBMg455wUj0RERGToGlDGz7ZtB7gDeM6yrApgA3Bfp0setyxrm2VZP7YsKz94bCpQ0ek5jgOmZVnjBjIWEZGhKJ5iLZ2ZpotZ2bmsamnDNIyY16pfXUDr4UMAZE5R4CciIhLNgDJ+lmW5gYeA1bZtb7Qs6xLgCcuyFgCX2bZ92LKsTOD7wA+BewY84qCCgtGJeqqE8npzUz0EGaY0t9LTQw99meeffzbu6w3DpDh/CeOaP2LN1dew4fXXou71c7lcPPTQlxMyN9J5ftXWVgFQVDyXgjR+H8NVOs8tGfo0vySZhtv8GuhSzyXAJNu2NwIEg78mYL5t2+8Fj7ValvVj4PngYw4B00JPYFlWIeC3bftEX164rq4Rv98Z4PATy+vNpba2IdXDkGFIcyt9mWZ2r8Vazl7rwppxMY1FSxl7zdWUTZvI82++EfFaj8dDaenNGEbWgOdGOs2vmEtnb7s1/NuRXvBmqEinuSXpR/NLkmmozy/TNPqcCBtoO4cjwBQruKHPsqz5wHjgqGVZecFjBnAnsDX4mC1AlmVZlwa/fwB4coDjEBEZsuIt1mIYJsuKV4LbzUd12eEKn0CPx4/UvX3qcygiItI/A93jVw18BnjKsqwPgd8SKNKSCbxuWdY2YAcwF1gXfIyfQPXPf7csaw/wMeCrAxmHiMhQVlhQyHXLL8AdY89eKNuXnZWH3+dQvr06XOGzpGQ5K1eWhh/vcbtH7N6+srJ14MTe+zhSg2IREZFYBlzV07btx4HHI5yK+uNW27bfBhYO9LVFRIaCeCt3xgpXwtm+IMdx2Lyxgsuvm8Ojjz5GbW0NL/3PC+DzYRpGUgObeN9PKpZTZmflMXfGReza9xZ+f8+apyp4IyIiEtlAl3qKiIx48Sw/dBsG0yZOCl9nGAahULBzti+kc9YPAo3dr19+PgZwbfGipAY2Q3E5ZajP4Z9eP8CyhSsxjMj/fCnbJyIiElki+viJiIxoZWXreq3c6crI4P99/0fcd9+dge9dbhy/g8/f0SPbF9I56wfwyXvvZ8/OHdw2dXrC30Nn8byfZARY8WYaC/KnYM24iPL9G7tk/ZTtExERiU4ZP5ERJJQ1CWWRpKv+fj6hIizRsmShPXmWNT9YidNg0fzLsWZeDBg9sn0hfp9DdWV9+PspS5by9/OKyT5ei+PrrbV7//X6fpIUYMWTaTRNF+MLZ1FSvKpH1k/ZPhERkeiU8RMZQbZsrKDqcH2XLJKcNZDPJ1aWzHS5wgFJWdk69u3by8MP/x2O4/CVr/wVDz/8D3EFUa7Ro3EXFNBRV0dbdTWZkyf3aYx9EfP9JCnAiifTGMqOZmfldcn6KdsnIiISmzJ+IiNEU2Mr5duPAXTZOyYBA/18wlkyd9efp3UPSLzeIh599DEKC71dfh+vUdOmA9BacbBP4+urs++nawYumQGW11vETTeswuOK/DPJ7nshu2b9klvwRkREJN0p8BMZIbZsrMBxHCCwd+yd1/en7bLPtWvXsGTJvF6/1q5dE/dzdv98Nm+s6PO47r3yGvD7uxxLdHYsMxj4tSQh8Ou+1LWsbB0GTpdrzCQHWKuzcyBCtU7oWfk0J5j1A4O5My4me1TP5bIiIiISoKWeIiNAU2Mr5R9WhWMSv89h985j4JCWyz4XLVrC/v37aG9vj3pNX6pONjW28o1vf5bjJw+fPfg48JWe10ZrYdC47UNa/+sXrCgo5NW6OjqStPwwlPGrrzjK249v5drVC8genZGQ5+6+1LWwoJAVEybxv5WH6QgGxa3tbVx99WUxn6e/bR787e2MOniQFYVeXq07TkenIDpS5VMIZP1O1lex/NyVaTmXRUREBosCP5ERYMvGCvx+P12S/MFETvn2apZfMi1hwcNg6GvVyXirRfYmWjDZsOU9qn76CPh8fPyWtbzxi5/S0epLyl64zGnT+PLObRzcvAn4T/7uO9Gv7UsA1n2p64IlE3njua2s8k7htaNHwHEwMTAAX7csYGcDafPQsn8fTlsbd5acxxuvv0JHa2v4XLTKpzlZeZRe9SBAl0I4IiIi0pUCP5FhrqmxlfJt1ThRVnY7fictMiV9Cd66Z9riyRCG9oo5jj/qNZECudNvb6T65z8Dx2HstddTePtaSk/U8tRT65OyF86dO4bZheM5VHkoYgPzkL4GYN2Xur7y/C5OnujAM/58rj/P4YV3N7Hyxpt46cXf4YtRUXQgwW7zro8AmLK0hBuzsnnu+Wfw+31Rs30ut8k9D1yQVj+0EBERSRXt8RMZ5rZsrMDxR8/Q+P1OWhR7iafUf4hpmnzitrU0bd/GmX17KStbh2nGvt2Zpos5087HNF0Rz4eCyaxRY8L74Oo3/pHqR/8DHIdxN62m8Pa1GEZgD9zSpcuSthfuvPPvwOjl9h1vANa0Yzu7f7uBXVuP4vcF5onf53CyrhkwqBozh49/7sssXbqMz3/hS6y++TbcUT4jl8vNyhvX9DvYDQV+2fMWUFJ8tkl7b30ORUREpHcK/ESGsdDyvRhxH3A26zeUxRO8AbgwuCJ/HA0Pf5vKH3yXw//0D/h//ztKV62OGjiGMkrnL76lR2+4s9cEAqnQPrhNL7zPsV/+HIDC2+6gcHWgPx/Qr2qd8WpqbOVUxgysmRf1GqT29vptx45R+YPv8sdX9kToCxjM/pkmRyrd4fdT9hefxeWJtljEoCRCgBYPf8sZWg4eANMky5rHmQZ3uHBLvH0ORUREJDot9RQZxjov34sllPUbynv9Qu0FNmx4OuaSTZdpcOuEibjy8sgYP4GW/fuof/MNbvQW8hxGxMdE6w0Xfk7DxXVLSshodcL74PYcaMJrZDLh+hWMu/7GxL7ZGLZsrCAQYK3CPvAO0HPZZbzZvob3/kSrOYqqvLk4dA8iA5+Vg9llbkT7cwgFz9//0d/wtX84TG+67z9s3m2Dz8eomTNxZWVxx/3LWXHT1D71ORQREZHoFPiJDGPVlafDy/d6E1o2N5T3+t1z96d49tmno553uz2sXnMLy/7qK7iyswFoOVRB1SM/JqfmGFfk5/Pq8dpwhUqI3Buue0BlGAarWlp5/YfP4s+bC5g4wBHras695eZkvNWIOmdwc6IEqX2pJNrw3rscGLcYTBdE39rYY25EKq4TCp7f/+h3nDxdhc/XEfO1bbucJUvm9TyxeRM88Wug/9VBRUREpCct9RQZxu64fzm3z63lqr0/58bJR3C5o/+V9/uG/l6/CruZudMvwhV1j5nJXzzwf8JBH8CoqdOY+rWvM+biS1m7cGmP5aIet5url1zFpQd+yx0LT/Pg35dyyy23hpeFejweblpxFYXnXUZV7uxwkRzHdHPYX8SZ5tgBTiJ1z+B2bWAeEG+2r/XoURqq66gaM6d768Eeus+NcHP34GfUOXheumAlRMms9sVAqoOKiIhITwr8RIa5xg+3ArDXPavXZZ9DuVhGKNtVUryK7rcu0zQxDCNqpsuVnc2E+z/Fsu/+gNW33B4OWNyGwdIZJbS6ijgwdjGjFy0Buu4nNE2Tzz70NY7MuQrcXfcIDubnFc72dcrghrJ+ob1+pumKu7hK4+Zgti/Knsbuur/Xzp9R5+IrOVl5zJtxES7XwBaUJKMVhoiIyEimwE9kGGuvO05b5RGMzFHUNbt6XfY5lItlBKqT+oPBzoXhrJ/H42HlytK4q2h2DVgMrLk3gWFQlTeXjvwi4GxGKxRMZo0aEwi6ulXJGcwsabT9mp2zfoZhxlVcxXEcGt57l/rMIvxx/jMQKet34w2lRCq+srR4FQPJ+iWj8b2IiMhIpz1+Imku3v521vHqHvulHJ+PA1/9Eh0nTzDli18me/6CZA2z35oaW3nxmZ3UHWsML0ksOfcm7IObgECT9M9//otxBwmhoO6pp9azzLqIrKy8QP1Kw2TL24e67GPbF2wFEatIzmDtjYy2XzOU9fto7x+xZlxM88nI42xqbOXl53Zx7eoFuOpraKs6ykWjX2XWP3+fooljefqxLezaVh3zhwPd32tJ8Uo2vb21R6uFnKw8rOkXYu/fiK9TX8R4eiWCsn0iIiLJoMBPJM3F05zc43ZH3C9luFyMufQyTrzwHA1bNg/JwG/LxgpqjjYQaC8QyCLlZOUxb+bFfLT3zX5lhsrK1rFn9x7mzVqDYwZug36MHtUrH330seASy/KoAVEoE5bsiqh33L886rnbaufzhXvu4C9zGrAWRM4+htpQbN5YwYIz2wDILVmG4Q68/3gKAXXOCDc1tlJV0U7plQ9GvDYcnPvOBnmm6WLWOcvYe+i9qM3nle0TERFJDgV+ImkuUoXF7kyXK2oGJWt2IHvTVnkk4WPrLyeY2mtubmfXturg0a5LB5cuWMmJ+qPce/en+/z8Xm8R9//Z13tkuCJl7+JpiZHqiqhebxE//MrXqPn1YzRt+5C8Sy7rcj60PxCgfFsVRae2YgKjl58fviZWYBlJb59LKDgv378Rn68jXACmpHgl+w5vIVIbClC2T0REJFm0x08kzXWvsNhdxfGGWgAAIABJREFUbxmUzMmTAWitrIyr51+y+NvbaPxgC1U//Xf2fu4z7P/i53nrv16NmoXKycpjzTVf4kB5U59fK1KhFIi8Z6+vmbBUyVm0GIDmnTtwOrpWGg3tjwTwd3Sw2zcZ15gxZFsR2inEKZ7PpXOFz1ABmO4FacAI77lUtk9ERCR5lPETGQZiZf16y6C48vIxs7PxNzfhq6/HnZ+frGFG5Wts5NA/foP22prwseYOkwOnMmL+eKq/yyz7smevr5mwVPEUesmYPIW2yiOc2bM7vGy3qbGV8g+rwvsjHcNFVb7FpaVXYbgit8WIRzyfS1NjKx989Dt27nkzaq9E03Thdpu0tbUp2yciIpJEyviJDAPRsn7xZFAMwyBz8hQAWo9WJnWc0dQ+8Vvaa2vweL0U3no7M/7pO9Re9UmcKP36OutrS4Vo2b6QdOhnGE3OwkUANH6wJXzsvTf24fd1W1bpcrHjcPLHs2VjBcsWrmSid3aXAjChrB8YzJ91CeeVXBWzHYeIiIgMnAI/kWGic5uCkHgzKBmTJgGp2efX9NFOTr/9FobbzeTPf5FxN6ykLWsMew+dIZ6WAH1dZtmXPXvpZnTJMgBOvfYqJ19+iabGVuztx3CMrgH0YAW31ZWnycrIo/SqB7u0e4BA1m+idzYlC1ayrPjGuNtxiIiISP9oqafIMOH1FnHjx67khZdfpMNx+rRfKmNScJ/fIGf8/K2t1PzqFwCMu2k1GRMmALGDM9NlMH/RxH4XUkmXPXv9kTVzFoW33sHxp5+gdv1v2Lv1NI5/HJg9f8Y3GAVpelsO+iCl4d/fzzVJG4eIiIgo8BMZVu5auoz/fvlFoG/VETODgV/b0aNJG1skdS88R3ttLRmTpzDuuhuA+Jdi9rd9Qrrs2euvcTfciHtsPhX/9WsOt48Lt6vorvPniFZXioiIDHta6ikyjGQfrWJFobfP+6Uygnv82o4OXmXPph3bOfmHF8EwGP/nnwj3kxvOSzEHy5gLL6b28ntxjNhLZfU5ioiIjBwK/ESGCaejgzP79nDrxCksWbSkT/ul3GPG4Bqdi//MGTpOnkjIeJoaW9nw+NaI+8haDx+m6pEfgd/PuJWryJo5K3xuOC/FHEzHm1099vZ1p89RRERk5NBST5EkaWps5eXndnHt6gX9WpLY1+dsOXgAp62N8dOm8/NvfqvPz50xaRJndtu0Ha3EM65gwGPdsrGCqsP1PfaRdZw6SeW/fg9/Swu5519AQenNXR433JdiDhZ9jiIiItKZAj+RJIkW+PQ1IGxqbOV3T2xnxY1W+Dlvv301lVUHoj/ohWcAsKx5rF+/Ia7xZkyewpndNq2VleScuyiux8Qac/n2YwDhfWSZTisNH2zh1Mt/oOPkCUbNnsP4T3wSI0LhERERERFJLAV+IkkQKfAJBXmdA8KLzhtH65HD5Cw4N7zHDaC97jjtNTVkzZvPlo0VHD5wgnde38++8loA8kdPpcZzhPb29qhj8Hg8LF68NO4xhwu8VA68smfnfXqOz8/rP97A7L0vEuoi7hk/gcmf/UtMT2IyoSIiIiISmwI/kSToEvj4HTb9fhsXX+DFN27C2YBw21EKXnwET0Mdrvx88q+4klHTp1P/xhs0bn0fHIeMS66ivG46jgO7dx7DDBbrWLZwJbsPvBNzDPFW9Vy7dg22XX72wOZN8K//3OO6eLOH3aty+h047CvgHHcWY+fOJHf5eYxedh6urKxen0tEREREEkOBn0iC9Qh8/A579tTjfeU/OTxzBY4xPnC8w8e+zDks8LXgO3WKug3PnH0SlwvDMNi2uwl/Xgdg8tTvv0ndqfgarPelh9+iRUvYv39fv7KHPYLGKArypzDvwR+wcFVxr9eKiIiISOJpc41Igm3ZWIHj71qV0jEM9hWdz2FfQWi1I47hoirfYuI3v8PkLzxIzqLFZEycxLibVjPz//0LYz/zV1SNmYMT/Gs6vnAmphm7SmNIX3r4lZWtw+xln12051u0aAkuV+yfH5mmi/GFs7DLT0Ss8CkiIiIiyafATySBwtm+HoGfi6qcmTjdAzeXiy2bKskpPpfJf/kFpn/zWxSuvhl3fj4fVbuhU1BVUrwKw+j9r6zbHX+2D8DrLaK09GY8Hk/E87Gyh/fc/Skgdq84wzBZVrxSPeNEREREUmjASz0ty1oFfJPA//4M4O9t237Gsqy5wC+BAqAOuM+27T3Bx0Q9J5LOems+7nQLkvw+p0fxF+gcQJ69NicrD2vGRZTv34jf74v6Gi5X/Nm+kLKydTz//LMRz8XKHlbYzcybeTG79r0VcUym6cKacTHZWXlR36uIiIiIJN+AMn6WZRnAr4B7bdteAtwL/NKyLBN4BPiRbdtzgR8BP+n00FjnRPps7do1LFkyr9evtWvXJG0M3ff2xStSJixaANlb1q+v2b6QcNbP1TUjGSvb19TYSvmHVSxdsDLqmELZvhBl/URERERSIxHFXfxAXvD3+UAVUAiUANcEj/8G+KFlWV4CWcGI52zbrk3AeCRNxVsoJFJ1yYEUKEmU3rJ90XTPhMUKIHvL+vUn2xcSzvr5zj5v52xf9/6Dbz+9Cb/PF3VMnbN9nd9rdWV9v8YnIiIiIv03oMDPtm3Hsqw7gOcsy2oCcoEbgXOAStu2fcHrfJZlHQ0eN2KcizvwKygYPZChJ43Xm5vqIaStCy44nwMH9tPWFr0ASEZGBhdeeEGPz/mhh74cdaliiMvl4qGHvpy0P6Pjx5r6nO0Lcxx2vn+UG29dyLtvHoQYAWRJ8SrsA+8AZ4OsQMbN4c4772T+/Jn9GoLXm8vatWv5za9/TXtHB27D4NaVK8PP9+6bB6k+Us+OLZVMq/2A/ZV5OKY76pgyMjw8/uT3KSoq6td4ZHDp3iXJorklyaT5Jck03ObXgAI/y7LcwEPAatu2N1qWdQnwBIEln0lVV9fYo4BGqnm9udTWNqR6GGnr3ns/xfr162Nf5PdzdVMb+196ndySZeHDpplNaenNbNjwdMSsn8fjobT0ZgwjK2l/RrfcF8gmHvrWN2jZv59J/+fzjF6ylCce3UxdTVPMx/p8Dgf2Hqe2toGDe4/jixFAhjJs9v638fk78Hg8XH/9Siorj3DvvZ8a0PsL/xl0dGAC17U71Byrp7m5na3vHsZx4IN3DlJ5+gTO6PweYwpl/Vwud9I/b0kc3bskWTS3JJk0vySZhvr8Mk2jz4mwgS71XAJMsm17I0Aw+GsCWoDJlmW5ghk9FzAJOEwg4xftnIxgoX1m0YI3t2FwxdgCMg8eoOZXvyCn+FzMzMzw+f4WKEmkjobTtBw4gOF2kz1/AQB33L+8T88R6fruN5/bauezatU1+Fo7ME2Tz3/+i33e1xdJ6M/gqafWs2LSFLKqqjj6b99nV/7ycIsKv99Pde4s6Lavr2vWz+Deuz894PGIiIiISGIMtJ3DEWCKZVkWgGVZ84HxwB5gK3BX8Lq7gA9s2661bbsm2rkBjkWGgVg95UzT5NOf+DSZU6fha2jg1Gv/S1NjKxse30pzYxuFhV5uuOgS3EbXypketztcoCR0/e23r05KMZjm7dvBcciy5nUJShMtFKAZhtGvYi6xlJWtY+nSZaz7yt+Ay8WJj/awr7L9bIVR090j6IOzWT8wmDfzYg6Ux85yioiIiMjgGVDgZ9t2NfAZ4CnLsj4Efgvcb9v2CeAB4HOWZe0GPhf8PiTWORnBvN4iSlet7hm8eTysufUO5vzZPRTechsAJ1/8PZvf2E/V4Xree2MvR3/4A244capHVznD56PUk4m/rY0tGyuoOlxPUcHMqH3rOr9mX4vBNG77EICchYv79Lj+CAVoic5ker1FPProY0y7/ApmfOthqs+/HaeXBu8hJcWrmOidTcmClSriIiIiIjKEDLiqp23bjwOPRzheDlwQ5TFRz8nwF2/1zs46L9XMLj6XUbNmU3+wEnvHMcCgfFs14w7aFOTlccPFl/L7dzfR3t6O2+ViRdF4Muxy9n3vXyk3zwdg9qQr+dPm/437NePR0XCapu3BwG9R8gO/UICWTG2Zozlw0oODv8c5l9vkngcu6NGT70FKkzomEREREem7gS71FOmzRYuW9JptAzCDWb/uveQMw6CgdA0Hxi3GH1x/6DgOFZMuZNrXv8Hn/u4fw8tFXW43n3/4B7jy89l1ajT+jg4AskaNYe70CzFNV4RXjt2/LpqTL72I09pKzsJFZAyTSpaxWlSoJ5+IiIhI+khEHz/ph9PvbsIztoCsOXNSPZRBF6sIS4hpunG7Tdra2iJm3pyps6kaU4NjBAI3x3RzNHsG7aPy8I7OCBcoWb36FiYtXEj9575M1a/Lz17vj9yC4Ozrd33NPmUpN2+Cn/80Yr/BdNJbQ/ru/QdFREREZOhSxi8FzuzZTfVPH+HI975D27HqVA9n0IUKk0TL+pmmi/kzL+G8kquiFi95/+1D4OqarXMgnIHqvv/tw/LGHteHipF0z/p5PB4Wzr+c7FFnG4/Hm6Xs/BzJbBY/GOJpSK+sn4iIiEh6UOCXAif/8BIATlsb1Y/+DMffc//UcBereqdhmJQUr2T2pCtZvKikR7YvnInq9rGFMlDNjW3h/W+hSp6RrodA1s/oXqHSMZg/7ZouAU2s8UYyWO0jkqm68nSvDen9PkdFXERERETSgJZ6DrK2mhoat76P4XZj5oymZd9eTr70e8bdsDLVQxtUoazfs08/QUeniMw0XVgzLiY7Kw/TZXD/n/1dj2xfPPvOLr9uTlzX92g8bhjMnX4h2Vl5lG+vZsGSibz1yl6uXb0gZo/BzvqzP3Ao6mv/QREREREZupTxG2SnXvkDOA6551/IhE/cD0Ddc8/SemTk9a//1J9/EqNbPGYYJsuKA0Fw5wxeSLz7zkKP6e166Jr1MwwXy+ZfDwSCyFee30XV4Xo2b6yIO+s3HLJ9IiIiIjK8KPAbRL7mJuo3/hGAsddcR865i8j72BU4HR0ce+y/Ujy6wZdTV8eKwkJcwT12nbN9Id33kPV131k813duPD535iVk5RQAgSDyZF0zAOXbq8nJyo+5NxGGT7ZPRERERIYXBX6DqP7NN3BaW8meX0zmOecAUHjbWjAMWvbvwwm2Ghgpmndu56YpsyGcbTub7QvpnsHr676zeK6Hs43Hu79+oGTM2WCyrGxdjwbxnSnbJyIiIiJDkfb4DRKno4NT//sKAPnXXBs+7srKwlNYSHttLW01NWROmpSqIQ66pp07ODnhfOY1uNm59489sn0hnfft9XXfWefrn3h0M3U1TRGvy8nKo/SqByOcCYR5nVsXXFu8iBc/fJ8Ox8EwDAzDwO/3K9snIiIiIkOWAr9B0nLoEB0nT+Dxesk5d2GXcxkTJgYCv+qqERP4tdfW0n7sGKenXsTS4lWcqK+KkG0LSFTlyFhB45sv7WbXtuqY2cFQAHrrxIm89GHgWGjZZ7R+gyIiIiIiQ4ECv0HSVhko3jJq5iyMbgVCMiZMpGn7Ntqrq1IxtJRo+mgHAFcWHmbSus/xIKWpG0scBWAgmPXbVsVFJ5tZ4R3Py7XHWLPmVhzHCTeLV7ZPRERERIYiBX6DpLWyEoDMyVN6nPNMnAhAW9XICfyadwYCv+zihb1cmXzxFIAJcfwOB/IXcfclBRyvOEBZ2Tocx2Hfvr3K9omIiIjIkKXAb5C0BQO/jEmTe5zLmBAM/EZIxs/x+Wje9REAOcXFKR5N/AVgAPwOVI2ZQ8nc8Tz69W+Gjz/66GPJGp6IiIiIyIAp8BskrcGlnplTemb8Ogd+TrBgyHDWsn8//jNn8IyfgGcILI3svPcvnr1+fmB3xyR6/kmKiIiIiAxNaucwCDoaTuM7fRojcxTucQU9zrtyczGzc/CfOYOvfuBFTIYyx3E4+fKLAD2K3AwFcWX/TDfHm/RXR0RERETShzJ+g6AtvL9vco/CLgCGYZAxcSIt+/bSVl2FOz9/sIc4aBre3UTj+1swR41i7LXXpXo4PUSq/OlvbeWjL36JjZNW4zfdmPhYtXZxCkYnIiIiItI/SlsMgtbKIwBkTO65vy9kJOzz6zh1kprHfwWAd+1deAoKUzyi+JiZmRye8THO5gFNNm+sSOGIRERERET6RoHfIGiLUdEzJBGBX7yVKVPBcRyO/fLn+JubyVm4iDGXXp7qIcWtqbGVw75CHDOQIPdjUL69mubGthSPTEREREQkPgr8BkEo4xcz8BtgSwfH76fyu//Mgb/5Kv7W1n49R4/ndBxOv7ORqv/8Kb7m5gE9V8N7f6Jp+zbM7BzG//kn0qqAzZaNFTh0HW+ombuIiIiISDpQ4JdkjuPQdjTYyiGJGb/GLZtp3rWT9mPVNG37sMu5jlOnaLbL+xQQ+s6cofo/fkL1f/4HDe+8TcOf3unXuEIaNgUeX7DmZtz5Ywf0XIMp3Nzd3zWb6vc5yvqJiIiISNpQcZcE8DU1Ufmv36P9isvwXPSxLuc6TpzAf+YMrtxc3GPGRH0OT2EhuFx01NXhb23FzMyM+/Udn4/jG54Jf9+w+V1yzzs/cM7v58h3H6bt6FFwuciaNZvcCy4k7/IrombdWg8f5uiP/4322prwsaadO8hfcVXcY+rM39ZGc/kuAHJLlvXrOVIlVnP3UNbv8uvmDPKoRERERET6Rhm/BPC3ttKyfx8Hf/kr2mtru5w7W9gldtc3w+0mo2g8AG3Hqvv0+qc3vkX7sWrcYwOZtKbt28LZveZdH9F29CiG2w1+P2d229T86pc0fvB+xOdyOjo4+siPaK+tIfOcqUz54peDz7MLp6OjT+MKOWOX47S1kTl1Wnpm+6K0d1DWT0RERETShQK/BPCMG0fuhRfhdHR0ybwBtMWxvy+kP8s9/e1t1L3wHACFt61l1MyZOG1tNG0PLPesf/01AMatvIlZ3/8h425cBcCJ/34+Yiar/q03aT9WjadoPOf89dfInr+AjEmTcFpbOLNvb9zj6qxx21YAchalVwuEWNm+EO31ExEREZF0oMAvQQpX34zhdtPwp3doOXQ2EIinlUNIfwq81L/2Gh0nT5B5zjnknnc+o5edB0Dtux/w7C83U7djF7hc5F32MVw5OYxbVYprzBhaD1WEg8MQf0sLdc9vCLyfW27F9GQAkF0caLTevHNH3OMKcRwnvOcwZ9GSPj8+leJp5u73OVRX1g/SiERERERE+kd7/BLEU+hl4sobOPrcCxx/+kmmfOFBIL5WDiGhjF97nBk/X2Mjdf/zAgAFN9+KYZrkLj+P40+uZ0elSXVuI668RSyf7gs3hTczMhh73Q0cf3I9J/77eXIWLg7v9Tv58kv4Tp9m1IyZ4QASIKf4XE69/BJNO7ZTeMttcX4igaWSLz2xlTmnmsnOHcOo6dPjfuxQEKmZu4iIiIhIOlLgl0BTbruV6j+8QvPOHZx6/VUyJk6ireooAJlxZPw8fVzqefy5Z/E3NpJlzSNnYWAZpaegEGbMo8qYCRhUjZlD5oXjuzwu/4orOfn7/6Fl/36aP9pJTvG5dJw+zYkXfw9A4W13YBgGa9euwbbLzz5w8yZ4Zn2PcVjWPNavD2QK22pqqH/jNfKvupot79VxrOYM7rGLOX+uC8NUgllEREREJBUU+CWQZ0wu425YyfFnnqLmsf8KH3cXFGCOyur18RkTJ4Jp0lpZScepkzELobQcqqD+9VfBNCn6s3u6VOg8WLQcJ1hjxjEMdh7LoHO7dDMzk7HXXsfxZ57i+FPraXx/S6AAS2sLOQsXkW3NA2DRoiXs37+P9vb26O/Z42Hx4qXh7+uee5aGP73D8c0fUl54PaHg07RG9/r+RUREREQkOZSCSbD8q68l7/IryF5QTNZci1EzZ1Jw0+q4HuvKymL00hLw+zn1xutRr3Mch5pfPwaOQ/6VV3VZRtrU2MrBUxk4ZiCmdwwX5duP9ag8mbfiKszsHFoPH6b+jddoq67CHD2awtvWhq8pK1uH2UuWzjRNysrWBV7L56NpxzYA9phT8QergDoY7DqVG9dnICIiIiIiiaeMX4KZGRmMv+/j/X58/oqraNyymfo336Bg5U2BNgzdNGx6h5a9e3DljqGgdE2Xc1s2VtC9HEmkfnOurCwmfPLTNL6/hczJk8mcOo3MadNxZZ3NTHq9RZSW3syGDU9HzPp5PB5Wr76FwkIvAC379+FvasLnnUJV3lwcXIHXN13Yu+o472NtZI/O6O9HIyIiIiIi/aSM3xCTZc0jY+IkfPWnaNzas9ee4zgcf/ZpAApvvR1Xdk74XLS+c9H6zY1evIQJn/gkY6+9nux587sEfSGxsn6ds30AjR8G2jZUTL4IXF0DVrU9EBERERFJHQV+Q4xhGOStuBKAU6+92uO873Q9HSfqMLOzGXPxJV3Oxeo719/AK5T183g8XY53z/YBNG37kFZXFoeaR8cdfIqIiIiISPIp8BuCxlx0CUZmJmfsclqD7SBCQj3+MiZO6lIlM1q2L2QggVekrF/3bF/78VrajlZy0LsMp1Ohmc6U9RMRERERSQ0FfkOQKyuLMRdeDMCp17tm/cKBX7D1Q0isbF9IorJ+bsNg1YqrI2b7jo6elZTgU0RERERE+k+B3xCVH1zu2bDpbRy/P3w81BcwY2LXwK+68nTUgCvE73Oorqzv13g6Z/1M4PbZVpfzjds+5MC4xWDEnlLK+omIiIiIDL4BVfW0LGs6sKHToXxgjG3b4yzLOgi0BL8AvmLb9kvBx10I/ATIAg4C99i2XTOQsQw3mVPOwT12HB0nT9B+rJqMiZOA6Bm/O+5fntTxhLJ+Tz21nisKi/Ds2onj92OYJv7WVs6U76J+wo34Y8eeAwo+RURERESkfwYU+Nm2fRBYEvresqzvd3vO22zb3tH5MZZlmcBjwMdt237LsqyvAd8G7h/IWIajzGnT6Dh5gpaKg2cDv+qze/wGW1nZOvbt28udYwvw1ddzxi4ne/4Cmnd9hNPRwcc8O5j61f876OMSEREREZHYErbU07KsDOBu4NFeLl0GtNi2/Vbw+0eAOxI1juFk1LTpALRWBJZG+lvO0HHyBIbbjcfrjfHI5PB6i3j00ceYevkVAJz+0zuc2bObml//CoCcRYsHfUwiIiIiItK7RDZwLwUqbdvu3HzuccuyDOAt4K9t2z4FTAXCm7xs2z5uWZZpWdY427ZPxPtiBQWjEzXuhPJ6cxP2XK5F86l77ll8VUfwenNp2HMMgKzJkygan5ew1+mrnOuv5MQLz9Hwp02cfnsj+P2MnjObWbevxpObuPcvXSVybol0p/klyaK5Jcmk+SXJNNzmVyIDv/vpmu27zLbtw5ZlZQLfB34I3JOoF6ura8Tf24ayQeb15lJb25Cw5+vILwKgce8+ao7V07BrLwCmd3xCX6fPMvPInDqN1kMVYBiMvWElhatv5lQL0JLCcQ1jiZ5bIp1pfkmyaG5JMml+STIN9fllmkafE2EJWeppWdZk4GPA46Fjtm0fDv7aCvwYCHUbPwRM6/TYQsDfl2zfSOHOy8eVn4+/pYX22pqohV1SwXv7WrKLz2XyFx7Ee+vtGO5E/gxBREREREQSKVH/W/9z4He2bdcBWJaVA7ht264PLvW8E9gavHYLkGVZ1qXBfX4PAE8maBzDzqip02g6dYqWioNdmrenWvb8BWTPX5DqYYiIiIiISBwSVdzl43Rd5jkeeN2yrG3ADmAusA7Atm0/cC/w75Zl7SGQKfxqgsYx7GSGC7wcjNrDT0REREREJJaEZPxs257b7fv9wNIY178NLEzEaw93ocqeLfv301ZbA4ZBxvgJqR2UiIiIiIikFW3MGuJCGb8ze/eA4+AuLMTMzEztoEREREREJK0krI+fJIc7Px/XmDHgBCqYDoXCLiIiIiIikl4U+A1xhmGEl3vC0CjsIiIiIiIi6UWBXxrInBbufqHCLiIiIiIi0mcK/NJAl4yflnqKiIiIiEgfKfBLA5mdAr9MLfUUEREREZE+UlXPNOAeO47cCy4C08CVm5vq4YiIiIiISJpR4JcGDMNg4qf/ItXDEBERERGRNKWlniIiIiIiIsOcAj8REREREZFhToGfiIiIiIjIMKfAT0REREREZJhT4CciIiIiIjLMKfATEREREREZ5hT4iYiIiIiIDHMK/ERERERERIY5BX4iIiIiIiLDnDvVA+gHF4BpGqkeR0RDdVyS/jS3JJk0vyRZNLckmTS/JJmG8vzqNDZXvI8xHMdJzmiS51Lgj6kehIiIiIiISIpdBrwVz4XpGPhlAucBVYAvxWMREREREREZbC5gIvAe0BrPA9Ix8BMREREREZE+UHEXERERERGRYU6Bn4iIiIiIyDCnwE9ERERERGSYU+AnIiIiIiIyzCnwExERERERGeYU+ImIiIiIiAxzCvxERERERESGOXeqBzAcWJY1F/glUADUAffZtr0ntaOSdGVZ1kGgJfgF8BXbtl+yLOtC4CdAFnAQuMe27ZpUjFHSh2VZ/wzcCkwHFtq2vSN4POp9S/c0iUeMuXWQCPew4Dndx6RXlmUVAL8CZgFtwB7gL2zbro01hzS/JB69zC8H2A74g5ffa9v29uDjbgK+QyB+2gJ8wrbt5sEe/0Ao45cYjwA/sm17LvAjAjcdkYG4zbbtJcGvlyzLMoHHgM8G59mbwLdTO0RJExuAy4GKbsdj3bd0T5N4RJtb0O0eBqD7mPSBAzxs27Zl2/ZCYB/w7VhzSPNL+iDi/Op0/uJO969Q0Dca+A/gJtu2ZwMNwIODPfCBUuA3QJZlFQElwG+Ch34DlFiW5U3dqGQYWga02Lb9VvD7R4A7UjgeSRO2bb9l2/bhzsdi3bd0T5N4RZpbvdB9TOJi2/YJ27Zf73RoEzCN2HNI80viEmN+xXIDsLnT6pdHgLVJGF5SKfAbuHOAStu2fQDBX48Gj4v01+OWZW2zLOvHlmXlA1OVc0quAAACT0lEQVTp9FN127aPA6ZlWeNSNkJJZ7HuW7qnSSJ0v4eB7mPSD8FM3meA54k9hzS/pM+6za+Q1y3L2mpZ1j9ZlpUZPNZlfgGHSMN/FxX4iQw9l9m2vRg4DzCAH6Z4PCIifaF7mCTSvwGNaB5JcnSfX1Nt215OYBn7AuBvUzWwZFDgN3CHgcmWZbkAgr9OCh4X6bPQ0inbtluBHwOXEPjJUngZgmVZhYDftu0TKRmkpLtY9y3d02RAotzDQPcx6aNgAaE5wFrbtv3EnkOaX9InEeZX5/vXaeBnRLl/EcgApt2/iwr8BihYLWorcFfw0F3AB7Zt16ZuVJKuLMvKsSwrL/h7A7iTwPzaAmRZlnVp8NIHgCdTM0pJd7HuW7qnyUDEuIeB7mPSB5ZlfYvAvr01wR8iQOw5pPklcYs0vyzLGmtZVlbw927gNs7ev14EzrMsa07w+weAJwZ31ANnOI6T6jGkPcuy5hEofT4WOEmg9Lmd2lFJOrIsaybwNOAKfn0E/KVt21WWZV1MoLriKM6WqT6WqrFKerAs61+BW4AJwHGgzrbt4lj3Ld3TJB6R5hZwE1HuYcHH6D4mvbIsqxjYAewGzgQPH7Bt++ZYc0jzS+IRbX4BDxOYPw7gAd4G/j/bthuDj1sdvMYFfAB83LbtpsEd/cAo8BMRERERERnmtNRTRERERERkmFPgJyIiIiIiMswp8BMRERERERnmFPiJiIiIiIgMcwr8REREREREhjkFfiIiIiIiIsOcAj8REREREZFhToGfiIiIiIjIMPf/A6Wf9a+3wsYPAAAAAElFTkSuQmCC\n",
      "text/plain": [
       "<Figure size 1080x360 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "fig = plt.figure(figsize = (15,5))\n",
    "plt.plot(close, color='r', lw=2.)\n",
    "plt.plot(close, '^', markersize=10, color='m', label = 'buying signal', markevery = states_buy)\n",
    "plt.plot(close, 'v', markersize=10, color='k', label = 'selling signal', markevery = states_sell)\n",
    "plt.title('total gains %f, total investment %f%%'%(total_gains, invest))\n",
    "plt.legend()\n",
    "plt.show()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": []
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Python 3",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.6.8"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 2
}
